有什么区别:-lX11选项与CMake中的target_link_libraries

时间:2015-12-01 07:36:10

标签: makefile linker cmake x11

我需要在我的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 库可以通过

链接
  1. -- 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
  2. 中使用target_link_libraries
  3. 直接将CMakeLists.txt选项添加到编译命令
  4. 他们之间有什么区别? -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的错误链接导致错误:

    1. 缺少/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行存在此选项
    2. 图书馆按顺序排列。我使用-X11命令检查依赖项,所有库按CMakeLists.txt的第17行到第29行排列。
    3. 唯一可能的原因是库的编译选项(第17行到第29行)和CMakeLists.txtpkg-config --libs(第116行)的顺序。

      否则,在我的程序中我必须遗漏另一个错误。

0 个答案:

没有答案