2012-03-23 13 views
0

私は自分のライブラリにlibpthread.aライブラリを組み込もうとしています。しかし、それを使用するコードをコンパイルしようとすると、リンカーの問題が発生します。g ++ライブラリを組み合わせる

g++ foo.cpp foo.o 
ar x /usr/lib/libpthread.a 
ar rcs libfoo.a *.o 

g++ bar.cpp -o bar -L./ -lfoo 

しかし、私は本当に私が間違ってやっているのか理解していないundefined reference to 'pthread_stuff'

の束で終わる:私は、次の操作を行って、それをコンパイルします。

答えて

0

だから私は、コンパイルに引数を変更することによって、それを修正:

g++ -static bar.cpp -o bar -L./ -lfoo

0

他のC関数を使用する関数をextern "C"として宣言する必要があります。そうしないと、C++ネームマングリングが名前を「歪める」でしょう。さらに詳しい情報:http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=%2Fcom.ibm.vacpp6m.doc%2Flanguage%2Fref%2Fclrc01name_mangling.htm

+0

しかし、私は '-lpthread'でそれをリンクされていた場合、なぜこれが問題ではありませんか? – Andrew

+0

それは*です。常に。リンケージになると、少なくとも。 –

+0

まあ...私は '-lpthread'をちょうど使用するとエラーは起こりません。だから...私にとっては奇妙なことだ。 – Andrew