2012-04-16 6 views
0

古いバージョンのC++ boostライブラリが含まれているマシンでデモを行う必要があります。具体的にはboost::threadが必要ですが、mutexクラスのメンバー関数lockを使用しています。残念ながら、古いバージョン(1.33.1)にはこのメソッドが含まれていません。以前のバージョンのboost C++を無視する

ターゲットマシンにroot権限を持っていないため、以前のバージョンのboostをアンインストールできません。私の解決策は、ターゲットマシン上の更新されたライブラリをあらかじめコンパイルし、新しいバージョンのライブラリにリンクすることだけでした。

ライブラリーコンパイルの部分がうまくいっていて、すべての問題がなくなりましたが、コンパイルしようとしたときに古いバージョンのブーストが使用されていました。私はちょっと調べましたが(ここではg ++のnoob)、-L-Iフラグを使用して、ヘッダとライブラリを探す場所を手動で指定できることがわかりました。私は相対パスでこれらを使用しようとしました(私はデモが実行されるディレクトリを知らないので、私は私の新しいブーストライブラリへの相対パスを知っている)、私はこの思い付いた:

-bash-3.2$ g++ -I./include -L./lib main.cpp -lthread 
/usr/bin/ld: cannot find -lthread 
collect2: ld returned 1 exit status 

私は、インクルード/ライブラリのディレクトリにもっと深いパスを指定するなど、あらゆる種類のものを試してきましたが、運がないので、私は枯れているように感じます。何か案は? 参考までに、私はブースト1.49.0を使用したいと思っています。

+0

ドゥ./libにlibthread.soがありますか? – Attila

+0

./libには、 'libboost_thread.a'、' libboost_thread.so'、 'libboost_thread.so.1.49.0'のファイルがあります。 –

答えて

1

試してください:あなたは-lのために指定する必要がライブラリの名前が.soファイルから派生し

g++ -I./include -L./lib main.cpp -lboost_thread 

:最初libをオフのままにして.so(例えばlibboost_thread.so - >-lboost_thread

+1

おそらくシステムにインストールされているものとは異なる設定でコンパイルされています。 BOOSTビルドプロセスのパラメータを調べよう – Attila

+0

あまりにも早く話しました:実行ファイルを実行すると、共有ライブラリをロード中にエラー*エラーが表示されます:libboost_thread.so.1.49.0:共有オブジェクトファイルを開くことができません:ディレクトリ*。 –

+0

私はLinux環境に精通していませんが、実行可能ファイルが共有ライブラリを見つけられるように環境変数の1つを設定する必要があると思います( 'PATH = $ PATH:$ PATH:./ lib')。 – Attila

関連する問題