在Mac OSx 10.9.3上的Liblinear

时间:2014-06-05 02:51:57

标签: matlab mex liblinear

环境: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"

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

2 个答案:

答案 0 :(得分:1)

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

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

...使用这个作为类比,也许您只在liblab项目中包含liblinear文件夹而不是文件夹及其所有内容?

答案 1 :(得分: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 Libtool

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