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_libraries
或link_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})
工作。谢谢。 – NikaTsanka