まず第一に、私はここで正しい文脈で質問をすることを願っています...
Code::Blocksを使用してC++でアプリケーションを構築します。このアプリケーションは、サードパーティによって提供され、パッケージ管理を介してシステムにインストールできない静的ライブラリを使用します。したがって、アプリケーションを配布するときにこれらのライブラリを出荷します。
ターゲット構成は次のようになります。
<Target title="Unix_162">
<Option output="bin/my_app" prefix_auto="1" extension_auto="1" />
<Option working_dir="/home/marco/third_party_dist/lib" />
<Option object_output="obj/Unix_162" />
<Option type="1" />
<Option compiler="gcc" />
<Option use_console_runner="0" />
<Option parameters="-c" />
<Compiler>
<Add directory="/home/marco/third_party_dist/include" />
</Compiler>
<Linker>
<Add library="/home/marco/third_party_dist/lib/lib1.so" />
<Add library="/home/marco/third_party_dist/lib/lib2.so" />
<!-- some more included the same way -->
<Add directory="/home/marco/third_party_dist/lib" />
</Linker>
</Target>
このターゲットをうまく構築して実行できます。すべてが機能します。
今日、私はDebian Squeezeで実行しようとし、実行可能ファイルとサードパーティのライブラリの両方を含むフォルダをコピーしました。すべてが1つのフォルダーにある限り、実行可能ファイルは.soファイルを見つけると思いました。私は間違っていた。メッセージが表示されます:
/home/my_app/my_app: error while loading shared libraries: lib1.so: cannot open shared object file: No such file or directory
Code :: Blocksは実行可能ファイルの作業ディレクトリを設定できるため、開発マシンでこのメッセージが表示されません。/etc/ld.so.conf.d/my_app.conf内に.soファイルの場所を置くことでエラーメッセージを削除できます...
とにかく実行可能ファイルをビルドして、実行ディレクトリ内のライブラリを検索することはできますか?または、これはDebianに固有の問題ですか?または、実行可能ファイルを実行する前に、プロセスの作業ディレクトリを指定できますか?
アプリケーションを起動する前に、システム構成/環境を変更しないようにしたい...