有一个libpthread.so连接Ubuntu上的麻烦

时间:2011-11-19 23:09:25

标签: ubuntu makefile undefined glfw

我已从此网站http://mnbayazit.com/406/bayazit

下载了源代码

这个项目有一些依赖关系:

库:FTGL(用于字体),FreeType2(FTGL需要),GLFW(用于Windows和键盘输入),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 个答案:

答案 0 :(得分:8)

尝试使用pthread进行重新配置,如下所示:

$ CFLAGS='-lpthread' ./configure

答案 1 :(得分:1)

TARGET_LINK_LIBRARIES命令中,移动pthread以使其成为最后一项。 GNU链接器要求依赖库来到它们的依赖项之前。

您不必像CMAKE_CXX_FLAGS_DISTRIBUTION那样指定pthread库的任何绝对路径,这样做会限制项目的可移植性。

答案 2 :(得分:1)

你需要链接到X11和pthread,我之前用glfw遇到过这个问题 -lX11 -lpthread

答案 3 :(得分:0)

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

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

包含多arch lib目录。但是,如果您拥有Ubuntu发布的编译器的最新版本,编译器应该自己执行此操作。