【问题标题】:Compiling openmp on mac using gcc and Matlab使用 gcc 和 Matlab 在 mac 上编译 openmp
【发布时间】:2017-03-11 21:53:47
【问题描述】:

我正在尝试编译一个在 mac 上使用 openmp 的 Matlab mex 程序。我想将此分发给其他 Matlab 用户,以便他们可以使用它,而无需安装其他软件。

据我所知,xcode 不允许这样做,所以我安装了 gcc。我能够很好地编译程序,并在本地运行它,但它链接到默认情况下在 mac 上不可用的依赖项(我认为)。特别是,otool 指向 libgomp.1.dylib 和 libgcc_s.1.dylib,据我所知,它们不是标准操作系统安装的一部分。

我能够静态链接到 libgomp.a,通过一些测试(重命名 .dylib 文件)似乎已经正确删除了该依赖项(即当我重命名 dylib 文件时代码仍然有效,并且 otool 没有列出它也是)。但是,我不确定如何删除 libgcc_s.1.dylib 依赖项。在 Windows 中,在本地复制 dll 可以解决问题,但这在 mac 上不起作用。我找不到该依赖项的静态库。相反,我试图让某些版本的 rpath 工作(使用本地复制的文件),但 otool 始终指向 /usr/local/opt/gcc/lib/gcc/6/libgcc_s.1.dylib

Matlab 命令的相关部分是:

'LDFLAGS="$LDFLAGS -fopenmp -Wl,-rpath,$ORIGIN/"' and
'-lgcc_s.1'

我在这里找到了一种解决方案:Openmp with mex in Matlab on mac

但是,对于另一个项目,我正在使用 gcc 特定的命令,所以我真的很想使用 gcc。

【问题讨论】:

    标签: c macos matlab gcc


    【解决方案1】:

    所以,我幸运地绕过了 mex 编译基础设施,直接将命令传递给了 gcc。首先,我使用“-v”选项运行了我目前拥有的内容,以查看 Matlab 发送给编译器的命令。然后我进行了 4 次编辑,1) 删除了 Matlab 创建的疯狂对象输出路径(使用一些临时文件夹) 2) 删除了对 xcode 的引用 3) 向 mex 文件夹添加了 -L 指令(尽管我可能会改变这个到正确的 gcc 目录-由于 Matlab 问题,我只是习惯于在本地复制文件以进行编译)和 4)添加了“-static-libgcc”(我发誓我以前尝试过...)哦,和 5)我还更新了 min osx 版本

    这是最后一行,前两行只是去掉了 -o 选项

    /usr/local/Cellar/gcc/6.3.0_1/bin/gcc-6 -Wl,-twolevel_namespace -static-libgcc  -L"/Users/jim/Documents/repos/matlab_git/matlab_sl_modules/plotBig_Matlab/+big_plot/private" -undefined error -arch x86_64 -mmacosx-version-min=10.12  -bundle  -Wl,-exported_symbols_list,"/Applications/MATLAB_R2017a.app/extern/lib/maci64/mexFunction.map" -fopenmp reduce_to_width_mex.o c_mexapi_version.o  -O -Wl,-exported_symbols_list,"/Applications/MATLAB_R2017a.app/extern/lib/maci64/c_exportsmexfileversion.map"  libgomp.a  -L"/Applications/MATLAB_R2017a.app/bin/maci64" -lmx -lmex -lmat -lc++ -o reduce_to_width_mex.mexmaci64
    

    哦,最后我应该提到我只是在终端中运行这些命令,而不是在 Matlab 命令窗口中...

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 2013-12-27
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多