环境: Matlab R2014a (8.3),Macosx mavericks 10.9.3,Apple LLVM version5.1 (clang-503.0.40)
我正在编译来自http://www.csie.ntu.edu.tw/~cjlin/liblinear/的liblinear包。我修复了matlab安装目录中的mexopts.h,使其指向右SDKROOT、C和CXX。当我在matlab内部的libllina1.94/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"你知道为什么我会得到这个错误吗?
发布于 2015-03-31 01:30:16
看起来程序正在查找blas文件夹中的文件。
当我尝试使用cmake (使用新的ranksvm-所以我无法使用brew)手动将liblinear添加到我的c++时,我得到了完全相同的错误。我通过将.o和blas/.o文件作为源代码添加到我的项目中解决了这个问题。
打个比方,也许你在...using项目中只包含了liblinear文件夹,而没有包含该文件夹及其所有内容?
发布于 2014-06-05 11:00:08
x86_64中的Dylib
首先,让我们确保i386(或者您链接到的任何库) dylib是x86_64格式的,或者至少是通用的(x86_64+ liblinear )格式。
$ 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 Libtool
我经常看到ld: symbol(s) not found for architecture x86_64的另一个实例是当我使用GNU的libtool编译node.js模块时。如果您安装了GNU Libtool,请尝试卸载/取消链接
https://stackoverflow.com/questions/24050862
复制相似问题