0

环境:Matlab R2014a (8.3), Macosx mavericks 10.9.3, Apple LLVM 5.1 (clang-503.0.40)

我正在从http://www.csie.ntu.edu.tw/~cjlin/liblinear/编译 liblinear 包。我修复了matlab安装目录中的mexopts.h指向正确的SDKROOT、C和CXX。当我从导向器 liblinear-1.94/matlab/ 下的 matlab 内部运行 make 时,libsvmread 和 libsvmwrite 成功生成了 mexmaci64 库。但是,它没有为训练和预测生成。因此,我评论了 make 中的 try catch 期望,以了解错误。现在我收到以下错误。

Error using mex  
Undefined symbols for architecture x86_64:  
"_daxpy_", referenced from:  
  TRON::tron(double*) in tron.o  
  TRON::trcg(double, double*, double*, double*) in tron.o  
"_ddot_", referenced from:  
  TRON::tron(double*) in tron.o
  TRON::trcg(double, double*, double*, double*) in tron.o
"_dnrm2_", referenced from:
  TRON::tron(double*) in tron.o
  TRON::trcg(double, double*, double*, double*) in tron.o
"_dscal_", referenced from:
  TRON::trcg(double, double*, double*, double*) in tron.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)


Error in make (line 16)
    mex CFLAGS="\$CFLAGS -std=c99 -v" -largeArrayDims train.c
            linear_model_matlab.c ../linear.cpp ../tron.cpp
            "../blas/*.c"

知道为什么我会收到此错误吗?

4

2 回答 2

1

看起来程序正在寻找 blas 文件夹中的文件。

尝试使用 cmake 手动将 liblinear 添加到我的 c++ 时,我遇到了完全相同的错误(使用新的 rankvm- 所以我无法酿造)。我通过将.o 和 blas/ .o 文件作为源添加到我的项目来解决这个问题。

...以此作为类比,也许您只在您的 Matlab 项目中包含了 liblinear 文件夹而不是该文件夹及其所有内容?

于 2015-03-30T17:30:16.337 回答
0

x86_64 中的 Dylib

首先,让我们确保 liblinear(或您要链接到的任何库)dylib 是 x86_64,或者至少是通用 (i386 + x86_64) 格式。

$ file /usr/local/Cellar/liblinear/1.94/lib/liblinear.dylib /usr/local/Cellar/liblinear/1.94/lib/liblinear.dylib:Mach-O 64位动态链接共享库x86_64

如果您通过Homebrew安装库,这应该不是问题。

GNU 工具

我经常看到的另一个例子ld: symbol(s) not found for architecture x86_64是当我使用 GNU 的 libtool 编译 node.js 模块时。如果您安装 GNU Libtool,请尝试卸载/取消链接

于 2014-06-05T03:00:07.920 回答