【问题标题】:Compile Fortran to mex on Mac在 Mac 上将 Fortran 编译为 mex
【发布时间】:2013-03-27 01:18:34
【问题描述】:

我最近不得不回到一个老问题:编译一个 fortran 脚本以在 Mac 上的 Matlab 下运行。我已设法将示例 c 文件编译为 mex,但 Fortran 文件拒绝,除非我使用 -c 并且我想要的对象 kt3d.for 抛出了一个有趣的完整列表,但都链接到相同的错误(我猜) .

我正在使用 XCode 4.6.1 在 OSX 10.7.5 上运行 Matlab R2011b。

我已经根据http://www.mathworks.se/support/solutions/en/data/1-FR6LXJ/修补了 Matlab

得到一个根据https://sites.google.com/site/dwhipp/tutorials/mac_compilers运行的Fortran编译器

我将 mex 文件更改为调用 bash 而不是 sh 但仍然没有乐趣。每次我想运行克里金包时都不得不启动我的旧 XP 机器,所以我真的很想为 OSX 编译这些东西。

以下是错误,它看起来像架构问题,但我不知道如何修复它。

>> mex kt3d.for
Undefined symbols for architecture x86_64:
  "_chknam_", referenced from:
      _readparm_ in kt3d.o
  "_cova3_", referenced from:
      _kt3d_ in kt3d.o
  "_ktsol_", referenced from:
      _kt3d_ in kt3d.o
  "_mexfunction_", referenced from:
     -exported_symbol[s_list] command line option
  "_picksup_", referenced from:
      _kt3d_ in kt3d.o
  "_setrot_", referenced from:
      _kt3d_ in kt3d.o
  "_setsupr_", referenced from:
      _kt3d_ in kt3d.o
  "_srchsupr_", referenced from:
      _kt3d_ in kt3d.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

    mex: link of ' "kt3d.mexmaci64"' failed.

Error using mex (line 206)
Unable to complete successfully.

【问题讨论】:

    标签: macos matlab fortran


    【解决方案1】:

    我相信这些符号可以在 GSLIB 中找到。假设你已经安装了这个并且你的编译器可以在某个地方找到它,你可能需要在你的 mex 命令中添加类似“-lgslib”的东西来让它为你链接库。

    【讨论】:

    • 我正在编译 GSLIB 包中的 kt3d.for 脚本,但似乎找不到其他函数。这是链接错误吗?
    • 好的,回到 GSLIB 网页,重新阅读编译说明,并在 gslib2 上进行了尝试。我迷路了。我将 gslib_compile.bat 调整为 sh 并运行它。这似乎没有给出预期的结果。将在此处显示输出,但 mini-Markdown codedoesn 似乎不会产生可读的文本。基本上它找不到似乎不合理的文件,因为它们应该存在的子文件夹不存在,可执行文件似乎直接位于 /bin
    • 我不能说我曾经使用过 GSLIB,所以如果您可以编辑您的问题以添加到您的代码中,那就太好了。另外,我注意到 _mexfunction_ 是缺失的符号之一,这表明您正在编译的文件实际上不是 MATLAB MEX 扩展。它实际上有一个名为 mexFunction 的函数吗? mathworks.com/help/matlab/apiref/mexfunction.html
    • 还没有,没有。但这就是我想要做的。似乎在我整理出内部 GSLIB 库的编译之前,fortran 编译器和 mex 编译器无论如何都不会工作。 GISLIB 文档似乎有点过时(不确定有人上次使用软盘是什么时候)。看起来我将不得不检查每个库组件的生成文件并检查其有效性。如果你知道自己在做什么,这不是一个有趣的任务,如果像我一样,你对编译等几乎一无所知,那就更糟了。
    • 你从哪里得到你试图编译的代码?我刚刚下载了gslib并通过它进行了一些grep。没有迹象表明此库中有任何 MATLAB 扩展代码。您不能只是向 MEX 扔随机库并期望它吃掉它们,它只接受专门为其编写的代码。
    猜你喜欢
    • 2015-01-10
    • 2023-04-06
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2011-06-26
    • 1970-01-01
    相关资源
    最近更新 更多