为什么我得到未定义的参考pthread_mutexattr_settype?

我试图从Novell LDAP C SDK编译和链接一个示例文件,但由于pthread库中有3个未解决的符号,链接失败。 我在Ubuntu 13.10上使用gcc 4.8.1(Saucy)。 我已经正确地将pthread库作为命令行中的最后一个库,但这些特定的符号仍然没有被parsing。

 $ 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 " )

不要编辑间距!