6

我已经从这个网站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})

我想,我不需要更改此字符串中的任何内容?

PS如果这意味着什么,我正在使用ubuntu 11.10 :)

4

4 回答 4

8

尝试使用包含的 pthread 重新配置,如下所示:

$ CFLAGS='-lpthread' ./configure
于 2013-06-10T09:05:35.093 回答
1

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

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

于 2011-12-04T16:18:46.423 回答
1

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

于 2012-01-18T07:18:12.887 回答
0

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

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

包括多架构库目录。但是,如果您拥有 Ubuntu 提供的编译器的最新版本,则编译器应该自行执行此操作。

于 2011-11-20T17:56:39.867 回答