これを解決するためのヒントを教えてもらえますか?
「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/']);
バッシュの場合:
https://serverfault.com/questions/54736/how-to-check-if-a-library-is-installedで提案されているように gcc を呼び出すだけで問題はありません。
$ 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()
呼び出しから削除する方法を見つけます。