C++プログラムでダイナミックライブラリを構築して使用する方法を学びたいと思っています。私がTerminalから起動すると、すべてがうまく動作し、プログラムがうまく動いています(私はMac OS X El Capitan上にいます)。驚いたことに、実行可能ファイルをクリックして起動しようとすると、そうではありません。私はdyld: Library not loaded: liblibrary.so
、Reason: image not found
エラーが発生します。ターミナルからでもプログラムを実行することができません
すべてのファイルは、同じレパートリーにあります。私はコマンドでそれらを構築します:
g++ -c -fPIC A.cpp
g++ -c -fPIC B.cpp
g++ -shared -fPIC A.o B.o -o library.so
g++ main.cpp library.so -o Program
ありがとうございました。
私は次の解決策を試してみました:
- は、ライブラリの拡張子を変更
LD_LIBRARY_PATH
とDYLD_LIBRARY_PATH
の両方で、PATHを追加:library.so
またはlibrary.dylib
- をRPATH
g++ main.cpp library.so -Wl,-rpath,. -o Program
とg++ main.cpp library.so -Wl,-rpath,$HOME/my_dir -o Program
コマンドラインから実行すると、 'library.so'ファイルと同じディレクトリにいますか?だからあなたの*現在のディレクトリ*にあるので、システムはライブラリを見つけることができます。現在のディレクトリ*になければ、システムはライブラリがどこにあるかを見つける必要があります。これは['-rpath'](https://en.wikipedia.org/wiki/Rpath)**リンカ* *オプション。 –
ところで、メインアプリケーションは '-fPIC'オプションでビルドする必要はなく、ライブラリだけをビルドする必要はありません。 –
はい私はカレントディレクトリにいましたが、以前は 'g ++ -Wl、-rpath、 'を試しました。 main.cpp library.so -oプログラムは現在のディレクトリにリンクし、何も変更されませんでした。 – kipgon