cmake链接xlib目录C++

问题描述:

我想编译一个cmake使用xlib的C++程序。但是,我遇到了一个问题,包括并链接cmake文件中的xlib库。cmake链接xlib目录C++

这是我得到的错误。

main.cpp:378: undefined reference to `XClearWindow' 
collect2: error: ld returned 1 exit status 
CMakeFiles/project1.dir/build.make:94: recipe for target 'project1' failed 
make[2]: *** [project1] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/project1.dir/all' failed 
make[1]: *** [CMakeFiles/project1.dir/all] Error 2 
Makefile:83: recipe for target 'all' failed 
make: *** [all] Error 2 

而当我只使用命令行进行编译时,它工作得很好。

我用这个命令(克++ main.cpp中-L的/ usr/X11R6/lib中-lX11)

,这是我的cmake文件。

cmake_minimum_required(VERSION 3.6) 
project(project1) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

link_directories(/usr/X11R6/lib) 

include_directories(/usr/share/X11) 

set(SOURCE_FILES main.cpp) 
add_executable(project1 ${SOURCE_FILES}) 

在你的情况,你忘了指定的cmake应该使用你的应用程序(target_link_librarieslink_libraries)链接库。

但是,为什么不让cmake自己找到所需的路径,库和包含它?我建议你使用find_package(X11)。在你的情况下,你可以尝试:

cmake_minimum_required(VERSION 3.6) 
project(project1) 

set(CMAKE_CXX_STANDARD 11) # for c++11 

find_package(X11 REQUIRED) 
link_libraries(${X11_LIBRARIES}) 
include_directories(${X11_INCLUDE_DIR}) 

set(SOURCE_FILES main.cpp) 
add_executable(project1 ${SOURCE_FILES}) 
+0

工作。谢谢。 – NikaTsanka