在 matlab 中使用库(gcc)和编译 mex 时出错

Posted

技术标签:

【中文标题】在 matlab 中使用库(gcc)和编译 mex 时出错【英文标题】:use library (gcc) in matlab and error with compile of mex 【发布时间】:2014-11-30 13:32:15 【问题描述】:

我正在使用 Mac OSX (yosemite V 10.10.1) 并在其上运行 MATLAB 2014a。

我想在 MATLAB 上使用 SPAM 库(J. Mairal 的稀疏建模软件),为此我必须安装 XCode6.1(具有 gcc)。首先我在命令窗口中输入mex -setup,结果如下所示:

mex -setup
MEX configured to use 'Xcode with Clang' for C language compilation.

Warning: The MATLAB C and Fortran API has changed to support MATLAB
     variables with more than 2^32-1 elements. In the near future
     you will be required to update your code to utilize the
     new API. You can find more information about this at:
     http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.

To choose a different language, select one from the following:
 mex -setup C++ 
 mex -setup FORTRAN

然后我在 SPAM 库中运行 compile.m 文件,突然我看到一个错误:

add_flag =
 -mmacosx-version-min=10.6
Warning: Directory already exists. 
> In compile at 144 
compilation of: -I./linalg/ -I./decomp/ -I./prox/ -I./dictLearn/ dictLearn/mex/mexArchetypalAnalysis.cpp
Building with 'Xcode Clang++'.
clang: warning: argument unused during compilation: '-fopenmp'
Error using mex
ld: warning: directory not found for option '-L/usr/lib/gcc/x86_64-linux-gnu/4.8/'
ld: library not found for -lgomp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Error in compile (line 439)
    mex(args:);

我不明白该怎么做。请帮帮我!

【问题讨论】:

我也有同样的问题。你找到解决办法了吗? 【参考方案1】:

看来实际错误发生在与预编译库的链接点。 2个问题如下:

    显然包含在compile.m 文件中的编译代码看起来像是打算用 gcc 编译的(它试图包含由 GCC 安装的文件,甚至可能是特定于 linux 的文件,你确定它是OSX 兼容的工具箱?),但该错误强烈表明您实际上是在使用 clang 编译它 - 您将需要更改编译器(简单)或重写 compile.m(不太容易)。

    找不到代码需要安装才能正确链接的库之一。在 OSX 上,我认为这个文件应该被称为 libgomp.dylib (任何 Mac 爱好者都想确认这一点?)。如果您的计算机上有它,那么它不在 clang 正在查找的目录中。您可以通过从终端运行 find / | grep libgomp.dylib 来确认已安装该库 - 如果存在,您可以将其添加到编译器参数中compile.m 使用 -I /DIRECTORY_HOLDING_LIBRARY 语法。

修复 1. 也完全有可能修复 2. - 我从未尝试过使用垃圾邮件

【讨论】:

以上是关于在 matlab 中使用库(gcc)和编译 mex 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 64 位 Windows 7 机器上使用 GCC 作为 MATLAB 2014a 的默认 MEX 编译器

MATLAB + Mex + OpenCV:链接和编译正确,但在运行时找不到库

Matlab mex 无法构建,但 gcc 可以

matlab上的旧gcc编译器

如何使用用户预定义的数据设置 mwArray?是不是可以混合使用 Matlab 库编译器和 mex 运行时?

尝试编译 MEX 文件时缺少 libkernel32