环境:Matlab R2014a (8.3), Macosx mavericks 10.9.3, Apple LLVM version 5.1 (clang503.0.40)
我正在编译从http://www.csie.ntu.edu.tw/~cjlin/liblinear/的线性包。我固定了matlab安装目录中的mexopts.h指向右SDKROOT, C和CXX。当我在lib -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"
知道为什么我得到这个错误吗?
看起来程序正在寻找blas文件夹中的文件。
我得到了完全相同的错误,当试图手动添加线性到我的c++使用cmake(与新的rank -所以我不能酿造)。我通过添加解决了这个问题。o和blas/。O文件作为我的项目的源代码。
…使用这个作为一个类比,也许你只包括线性文件夹,而不是文件夹及其所有内容在你的Matlab项目?
Dylib in x86_64
首先,让我们确保线性(或您链接到的任何库)dylib是x86_64格式,或者至少是通用(i386 + x86_64)格式。
$ file/usr/local/cellar/lilinear/1.94/lib/lilinear .dylib/usr/local/Cellar/liblinear/1.94/lib/liblinear.dylib: Mach-O 64位动态链接共享库x86_64
如果你通过Homebrew安装你的库,这应该不是一个问题。
<标题> GNU Libtool h1> 一个我经常看到ld: symbol(s) not found for architecture x86_64
的例子是当我使用GNU的libtool编译node.js模块时。如果您安装了GNU Libtool,请尝试卸载/解除链接
标题>