2016-10-05 91 views
0

我想編譯一個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}) 

回答

2

在你的情況,你忘了指定的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