我已从此网站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.txtSET(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,如果这意味着什么:)
答案 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发布的编译器的最新版本,编译器应该自己执行此操作。