环境: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"
我知道为什么会收到此错误?
答案 0 :(得分:1)
看起来该程序正在寻找blas文件夹中的文件。
当我尝试使用cmake手动将liblinear添加到我的c ++时,我得到了完全相同的错误(使用新的rankvm-所以我无法酿造)。我通过添加 .o和blas / .o文件作为我的项目的源来解决这个问题。
...使用这个作为类比,也许您只在liblab项目中包含liblinear文件夹而不是文件夹及其所有内容?
答案 1 :(得分:0)
首先,让我们确保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安装库,这应该不是问题。
我经常看到ld: symbol(s) not found for architecture x86_64
的另一个例子是我使用GNU的libtool编译node.js模块。如果您安装GNU Libtool,请尝试卸载/取消链接