Почему я получаю ссылку undefined на pthread_mutexattr_settype?

Я пытаюсь скомпилировать и связать образец файла с SDK Novell LDAP C, но ссылка не работает из-за 3 неразрешенных символов в библиотеке pthread. Я использую gcc 4.8.1 на Ubuntu 13.10 (Saucy). Я правильно включил библиотеку 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 [email protected]@GLIBC_2.1<br>
   493: 00009d90    36 FUNC    GLOBAL DEFAULT   13 pthread_mutexattr_settype

Ответ 1

Просто написать комментарий в качестве ответа, поскольку он оказался полезным на основе отзывов других пользователей.


Просьба передать -pthread компилятору (без -l). См. Также gcc - значение флага -pthread при компиляции.

Ответ 2

В cmake вы можете добавить set( CMAKE_CXX_FLAGS " -pthread " )

Не редактируйте интервал!