3

私は非常に基本的な C++ プロジェクトをコード ブロックで使用してglfw.soおり、別のプロジェクトから .so ファイルにコンパイルされたlibHorde3D.soおよびlibHorde3DUtils.so. 後者はプロジェクトのルートフォルダーに配置されますが、glfw は私のどこかにある/usr/libと思います (と思います)。

プロジェクト フォルダーをコード ブロックのリンカーとコンパイラの検索パスに追加しました。Linker Settings タブの Link Libraries にlibHorde3D.soandlibHorde3DUtils.soを追加しました。glfw.soここのstackoverflowに関する以前の同様の質問に基づいて、これで十分だと思いました。

ただし、ビルドを押すと:

ld cannot find -lHorde3D.so
ld cannot find -lHorde3DUtils.so
ld cannot find -lglfw.so

私のシステムは Arch Linux 64 で、GCC を使用しています。また、bopyinglibHorde3D.solibHorde3DUtils.soin/usr/libとin を試しました/usr/lib64が、成功しませんでした。

PS すべての検索パスは、デバッグおよびリリース ターゲット全体にコピーされます。

4

2 に答える 2

4

たとえば、ライブラリ名が の場合、そのライブラリlibmylibrary.soに対してリンクするリンカー オプションは のようになります-lmylibrarylib接頭辞と接尾辞は存在しないことに注意してください.so。これらはリンカーによって自動的に追加されます。あなたの場合、間違った名前を指定したようです。そこから削除.soしてみてください。これで問題が解決するはずです。

同様の間違いを犯して失敗を引き起こす方法の簡単なデモを次に示します。

$ echo 'int main() { return 0; }' > test.c
$ gcc -o test ./test.c -lc
$ gcc -o test ./test.c -lc.so
/usr/bin/ld: cannot find -lc.so
collect2: ld returned 1 exit status
$ 

最初のコマンドは成功しますが、2 番目のコマンド (ライブラリ名が正しくない) は失敗します。

于 2012-07-24T14:30:02.137 に答える
3

「.so」を渡してはいけません。リンカーのオプションは次のとおりです。

-lHorde3D -lHorde3DUtils -lglfw

このようにして、リンカはライブラリ パスで「libHorde3D.so」などを検索します。

于 2012-07-24T14:29:52.533 に答える