簡體   English   中英

為什么我得到pthread_mutexattr_settype的未定義引用?

[英]Why am I getting undefined reference to pthread_mutexattr_settype?

我正在嘗試編譯和鏈接Novell LDAP C SDK中的示例文件,但由於pthread庫中有3個未解析的符號,鏈接失敗。 我在Ubuntu 13.10(Saucy)上使用gcc 4.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

只需將評論作為答案撰寫,因為根據其他用戶的反饋證明它是有用的。


請將-pthread傳遞給編譯器(不帶-l )。 另請參閱gcc - 編譯時-pthread標志的重要性

在cmake中你可以添加set( CMAKE_CXX_FLAGS " -pthread " )

不要編輯間距!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM