我试图从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 " )
不要编辑间距!