2014-03-04 2 views
11

Я пытаюсь скомпилировать и связать образец файла с SDK Novell LDAP C, но ссылка не работает из-за 3 неразрешенных символов в библиотеке pthread. Я использую gcc 4.8.1 на Ubuntu 13.10 (Saucy). Я правильно включил библиотеку pthread в качестве последней библиотеки в командной строке, но эти конкретные символы до сих пор не разрешены.Почему я получаю неопределенные ссылки на pthread_mutexattr_settype?

$ 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 
+5

Попробуйте передать '-pthread' в компилятор (без' -l'). См. Также [gcc - значение флага -pthread при компиляции] (http://stackoverflow.com/q/2127797/341970). – Ali

+0

Это сделало трюк! Благодаря! – Bob

+0

ОК. Рад, что это помогло! – Ali

ответ

19

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


Пожалуйста, передайте -pthread в компилятор (без -l). См. Также gcc - significance of -pthread flag when compiling.

+0

Почему? В чем разница между '-pthread' и' -lpthread'? Спасибо за решение, хотя, это сработало и для меня. – TheNotMe

+0

@TheNotMe Пожалуйста, прочитайте связанное сообщение для объяснения. – Ali

1

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

Не изменяйте расстояние!

Смежные вопросы