0
  1. /usr/local/boost_1_49_0/最初に、に移動して実行することにより、ビルドが必要な Boost ライブラリをビルドしましたbootstrap.sh。これでうまくいきました。
  2. 手順 (1) ですべてのファイル.so.aファイルを作成しました/usr/local/boost_1_49_0/stage/lib
  3. lboost_regexたとえば、ライブラリとのリンクを#include <boost/regex>ソースコードでテストしました。これも無事に落ちました。
  4. 最後にasioで例を試してみて、試しました:

    g++ -I/usr/local/boost_1_49_0 MAIN.cpp -o MAIN -L/usr/local/boost_1_49_0/stage/lib -lboost_thread -lboost_system -lpthread
    

(4) 無事コンパイル完了。しかし、でプログラムを実行すると./MAIN、次のエラーが発生します。

./MAIN: error while loading shared libraries: libboost_system.so.1.49.0: cannot open shared object file: No such file or directory 
4

2 に答える 2

3

この-Lオプションは、コンパイル時のライブラリ検索パスのみを設定します。共有ライブラリを実行時に検出する場合は、そのディレクトリが実行時に認識されている必要があります。

これを設定する1つの方法は、コンパイラを介してリンカg++に渡すことです。-rpathあなたの場合、あなたは言うことができます-Wl,-rpath -Wl,/usr/local/boost_1_49_0/stage/lib。(これにより、ディレクトリが実行可能ファイルに埋め込まれます。)

もう1つの方法は、リンカがデフォルトで検索する場所にライブラリをインストールすることです(たとえば/usr/local/lib、システムの構成方法によっては、そのような場所になる場合があります)。

さらに別の方法は、LD_LIBRARY_PATH(LinuxまたはSolaris)やDYLD_LIBRARY_PATH(Mac OS X)などの環境変数を設定して、変数が設定されているシェルから実行可能ファイルを起動するときに検索する場所をリンカーに指示することです。

于 2012-07-07T04:59:42.697 に答える
1

共有ライブラリがローダーが見つけられる場所にあることを確認しますか?システム全体のディレクトリまたは実行可能ファイルと同じディレクトリに配置します。

ローダーに関する詳細情報へのリンクは次のとおりです。

于 2012-07-07T04:59:07.550 に答える