我已经从这个网站下载了源代码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.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})
我想,我不需要在这个字符串中改变任何东西?
注:我用的是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编译器,编译器应该自己完成这项工作。