バックグラウンド:
いくつかの静的ライブラリを共有ライブラリにリンクしたいと思います。その理由は、アプリケーションでテストした特定のlibバージョンを使用するためです。静的バージョンをアプリケーションと共有ライブラリとして出荷したくありません。このサンプルライブラリとアプリケーションは、可能な限り単純化するために作成しました。リンク中に共有ライブラリをアプリケーションにリンクし続けたいと思います。
質問:
以下のエラーメッセージが表示されるのはなぜですか?私は何が間違っているのですか?おそらくこれはLinuxで物事を行う通常の方法ではありませんが、そうすることは可能ですか?このブーストは特定のものですか?
- - 図書館
//example.cpp
#include <boost/thread.hpp>
void doit()
{
boost::thread t1;
}
#build script
g++ -Wall -fPIC -I/usr/include -c example.cpp -o example.o
g++ -shared /usr/lib/libboost_thread.a /usr/lib/libboost_system.a
example.o -o libexample.so
#build OK.
----サンプルアプリケーション
//main.cpp
#include <iostream>
void doit();
int main()
{
std::cout << "main\n";
doit();
return 0;
};
#build script.
g++ -Wall -c main.cpp -o main.o
g++ libexample.so main.o -o main
#error message.
libexample.so: undefined reference to `boost::thread::thread()'
libexample.so: undefined reference to `boost::thread::~thread()'
collect2: ld returned 1 exit status
すべてのソースコードは同じディレクトリにあります。Boostは/usr/libと/usr/includeにインストールされます。Boostバージョン1.40は、ubuntu10.04マシンにapt-getを使用してインストールされました。
ありがとうございました!