任何人都可以给我一些解决这个问题的提示吗?
我正在尝试编译“Kinect Matlab”(在 Mac OS 10.7 上),在编译脚本中是以下行:
mex('-v','-L/usr/lib/','-lOpenNI',[...],Filename);
这是 mex 运行的完整命令:(1)
gcc-4.2 -O -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2011a.app/extern/lib/maci64/mexFunction.map -o "mxNiChangeDepthViewPoint.mexmaci64" mxNiChangeDepthViewPoint.o -L/usr/lib/ -lOpenNI -L/Applications/MATLAB_R2011a.app/bin/maci64 -lmx -lmex -lmat -lstdc++
然后我收到以下错误:
ld: library not found for -lOpenNI
collect2: ld returned 1 exit status
mex: link of ' "mxNiChangeDepthViewPoint.mexmaci64"' failed.
绝对有一个文件在/usr/lib/libOpenNI.dylib
.
什么样的事情会导致ld
抛出这个错误?
我尝试了什么:
- 我尝试创建一个名为 的符号链接
libOpenNI.so
,就像 jmlopez 建议的那样,没有效果。 - 会不会
libOpenNI
是一个 32 位的库,并且ld
因为这个原因而没有看到它?或者错误会有所不同吗? - 关于上面的一点,它说构建是“通用 x86/x64”
环境变量:
我尝试从 matlab 终端使用以下命令将库添加到环境变量中。没有效果。
setenv('DYLD_LIBRARY_PATH', [getenv('DYLD_LIBRARY_PATH') ':/usr/lib/']);
在 bash 中:
只需按照此处的建议调用 gcc https://serverfault.com/questions/54736/how-to-check-if-a-library-is-installed没有问题。
$ gcc -lOpenNi
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
但是,如果我先运行 g++,然后像(1)中那样运行 gcc,则会出现与以前相同的错误。(找不到库)。为什么 gcc 可以找到该库,但是当 matlab 在(1)中添加内容时,它会搞砸?
因此,与上述内容相关,我开始从(1)中删除所有参数,直到出现不同的错误。我删除了-Wl,-syslibroot
,这意味着 -syslibroot 将不再被传递给ld
,这似乎已经修复了它。-syslibroot
弄乱图书馆搜索目录也是如此!现在想办法从mex()
调用中删除这个参数。