拥有一个libpthread.把Ubuntu上的麻烦联系起来



我已经从这个网站下载了源代码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})

我想,我不需要在这个字符串中改变任何东西?

注:我用的是ubuntu 11.10,如果这意味着什么的话:)

尝试重新配置pthread:

$ CFLAGS='-lpthread' ./configure

TARGET_LINK_LIBRARIES命令中,移动pthread使其成为最后一项。GNU链接器要求依赖库位于依赖库之前。

你不应该像在CMAKE_CXX_FLAGS_DISTRIBUTION中那样指定任何pthread库的绝对路径,这样做限制了项目的可移植性。

您需要链接到X11和pthread,我以前使用glfw时遇到过这个问题。
-lX11 -lpthread

将-L设置为文件名不会解决任何问题。如果有的话,你应该设置:

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

包含multi-arch lib目录。然而,如果你有最新版本的ubuntu编译器,编译器应该自己完成这项工作。

最新更新