我需要在我的Ubuntu 15.04 64位PC上使用OpenGL作为库,这是由CMake 3.0.2构建的。我安装了包:mesa-common-dev mesa-utils-extra libgl1-mesa-dev libglu1-mesa-dev libglapi-mesa libx11-dev libxi-dev libxinerama-dev libxcursor-dev libxrandr-dev
运行cmake和Makefile后,我收到了以下链接错误:
/usr/bin/ld: /home/user/CMU462/DrawSVG/asst1_drawsvg/lib/libglfw.a(x11_window.c.o): undefined reference to symbol 'XConvertSelection'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libX11.so: error adding symbols: DSO missing from command line
我查了/usr/lib/x86_64-linux-gnu/libX11.so
,它确实存在。
我找到了explanation,似乎我无法将我的项目与 X11 库链接起来。答案是说添加-lX11
选项可以解决这个问题。
或者我链接 根据{{3}} {/ 1}}中的{em> X11 库:
CMakeLists.txt
运行cmake我得到了这些输出:
find_package(X11 REQUIRED)
message(STATUS "X11_FOUND = ${X11_FOUND}")
message(STATUS "X11_INCLUDE_DIR = ${X11_INCLUDE_DIR}")
message(STATUS "X11_LIBRARIES = ${X11_LIBRARIES}")
include_directories(${X11_INCLUDE_DIR})
link_directories(${X11_LIBRARIES})
target_link_libraries(MyProj ... ${X11_LIBRARIES})
但我仍然有上述错误。
问题: X11 库可以通过
链接-- X11_FOUND = 1
-- X11_INCLUDE_DIR = /usr/include
-- X11_LIBRARIES = /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so
或target_link_libraries
CMakeLists.txt
选项添加到编译命令他们之间有什么区别? -lX11
中的链接是否直接导致生成CMakeLists.txt
中的-lX11
选项?
如果是这样,我在Makefile
做错了吗?
更新
我们以FindX11.cmake为例,以下是我的构建过程。
安装必需的库:安装 OpenGL 和其他相关库(提供 GLEW 和 GLFW 库在这个项目中):CMakeLists.txt
运行CMake :然后使用提供的mesa-common-dev mesa-utils-extra libgl1-mesa-dev libglu1-mesa-dev libglapi-mesa libxi-dev libxinerama-dev libxcursor-dev libxrandr-dev
,一切正常。
制作:制作项目时,发生了以下错误:
CMakeLists.txt
我已多次搜索,所有答案都说glfw3和x11的错误链接导致错误:
/usr/bin/ld: /home/user/CMU462/DrawSVG/asst1_drawsvg/lib/libglfw.a(x11_window.c.o): undefined reference to symbol 'XConvertSelection'
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libX11.so: error adding symbols: DSO missing from command line
选项。但是,this project的第26行存在此选项-X11
命令检查依赖项,所有库按CMakeLists.txt
的第17行到第29行排列。唯一可能的原因是库的编译选项(第17行到第29行)和CMakeLists.txt
的pkg-config --libs
(第116行)的顺序。
否则,在我的程序中我必须遗漏另一个错误。