Проблемы с линковкой в ​​libpthread.so в Ubuntu - PullRequest
6 голосов
/ 20 ноября 2011

Я скачал исходный код с этого сайта http://mnbayazit.com/406/bayazit

Этот проект имеет некоторые зависимости:

Библиотеки: FTGL (для шрифтов), FreeType2 (необходим FTGL), GLFW (для окон и ввода с клавиатуры), OpenGL. Программное обеспечение: CMake (если оно не собирается) Но у меня проблема с ним.

И руководство по установке выглядит как

Для сборки и запуска:

cmake .
make
./conv

и я пытаюсь его построить.

$ cmake .  

идет нормально, но когда я пытаюсь

$ make

Я получаю эту ошибку:

Linking CXX executable conv
/usr/bin/ld: /usr/local/lib/libglfw.a(x11_init.o): undefined reference to symbol 'pthread_kill@@GLIBC_2.0'
/usr/bin/ld: note: 'pthread_kill@@GLIBC_2.0' is defined in DSO /lib/i386-linux-gnu/libpthread.so.0 so try adding it to the linker command line
/lib/i386-linux-gnu/libpthread.so.0: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[2]: *** [conv] Error 1
make[1]: *** [CMakeFiles/conv.dir/all] Error 2
make: *** [all] Error 2

Я погуглил эту проблему и попытался изменить CMakeLists.txt, изменив

SET(CMAKE_BUILD_TYPE distribution)
SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3")

до

SET(CMAKE_BUILD_TYPE distribution)
SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3 -L/usr/lib/i386-linux-gnu/lpthread")

Но ничего не изменилось. Я плохо гуглил пару часов, но не могу решить проблему, у меня все та же ошибка. Кстати,

TARGET_LINK_LIBRARIES(conv Xrandr pthread ftgl glfw ${OPENGL_LIBRARIES})

Полагаю, мне не нужно ничего менять в этой строке?

P.S. Я использую Ubuntu 11.10, если это что-то значит:)

Ответы [ 4 ]

8 голосов
/ 10 июня 2013

попробуйте перенастроить с включенным pthread так:

$ CFLAGS='-lpthread' ./configure
1 голос
/ 04 декабря 2011

В команде TARGET_LINK_LIBRARIES переместите pthread, чтобы он стал последним элементом.Компоновщик GNU требует, чтобы зависимые библиотеки предшествовали своим зависимостям.

Вам не нужно указывать абсолютный путь к библиотекам pthread, как вы сейчас делаете в CMAKE_CXX_FLAGS_DISTRIBUTION, и это ограничивает переносимость проекта..

1 голос
/ 18 января 2012

Вам нужно связаться с X11 и pthread, у меня раньше была эта проблема с glfw.
-lX11 -lpthread

0 голосов
/ 20 ноября 2011

Установка -L для базового имени файла не решит никаких проблем.Во всяком случае, вы должны установить:

SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3 -L/usr/lib/i386-linux-gnu/")

, чтобы включить многоархивную директорию lib.Тем не менее, компилятор должен делать это самостоятельно, если у вас установлена ​​последняя версия компилятора Ubuntu.

...