web-dev-qa-db-ja.com

pthread_mutexattr_settypeへの未定義の参照を取得するのはなぜですか?

Novell LDAP C SDKからサンプルファイルをコンパイルしてリンクしようとしていますが、pthreadライブラリに3つの未解決のシンボルがあるため、リンクが失敗します。 Ubuntu 13.10(Saucy)でgcc4.8.1を使用しています。コマンドラインの最後のライブラリとしてpthreadライブラリを適切に含めましたが、これらの特定のシンボルはまだ解決されていません。

$ gcc -Wl,-trace-symbol=pthread_mutexattr_settype -Wl,-trace-symbol=pthread_mutexattr_init   -Wl,-trace-symbol=pthread_mutex_trylock  -o search search.o -L../lib -lldapsdk -lpthread

../lib/libldapsdk.so: reference to pthread_mutexattr_settype<br>
../lib/libldapsdk.so: reference to pthread_mutexattr_init<br>
../lib/libldapsdk.so: reference to pthread_mutex_trylock<br>
/lib/i386-linux-gnu/libpthread.so.0: definition of pthread_mutexattr_settype<br>
/lib/i386-linux-gnu/libpthread.so.0: definition of pthread_mutexattr_init<br>
/lib/i386-linux-gnu/libpthread.so.0: definition of pthread_mutex_trylock<br>
../lib/libldapsdk.so: undefined reference to pthread_mutexattr_settype<br>
../lib/libldapsdk.so: undefined reference to pthread_mutex_trylock<br>
../lib/libldapsdk.so: undefined reference to pthread_mutexattr_init<br>
collect2: error: ld returned 1 exit status

$ readelf --all  /lib/i386-linux-gnu/libpthread.so.0|grep pthread_mutexattr_settype<br>
   114: 00009d90    36 FUNC    GLOBAL DEFAULT   13 pthread_mutexattr_settype@@GLIBC_2.1<br>
   493: 00009d90    36 FUNC    GLOBAL DEFAULT   13 pthread_mutexattr_settype
12
Bob

他のユーザーのフィードバックに基づいて役立つことがわかったので、コメントを回答として書くだけです。


-pthreadをコンパイラに渡してください(-lなし)。 gcc-コンパイル時の-pthreadフラグの重要性 も参照してください。

23
Ali

Cmakeではaddset( CMAKE_CXX_FLAGS " -pthread " )ができます

間隔を編集しないでください!

8
John