2017-05-31 136 views
0

作爲我正在開發的項目的一部分,我需要使用WebKitGTK +庫。 我下載了庫(tarball)並按照here的描述進行了編譯。無法將本地編譯的庫添加到CMake項目中

後編制已完成:
的LIB的頭是在/usr/local/include
該庫文件位於/usr/local/lib

在我的C++項目,我嘗試添加以下CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.7) 
project(CVE_2016_4657) 

set(CMAKE_CXX_STANDARD 11) 
set(SOURCE_FILES main.cpp) 
add_executable(CVE_2016_4657 ${SOURCE_FILES}) 

find_package(PkgConfig REQUIRED) 

include_directories(/usr/local/include/webkitgtk-4.0) 
link_directories(/usr/local/lib/webkit2gtk-4.0) 

pkg_check_modules(GTK3 REQUIRED gtk+-3.0) 
include_directories(${GTK3_INCLUDE_DIRS}) 
link_directories(${GTK3_LIBRARY_DIRS}) 
add_definitions(${GTK3_CFLAGS_OTHER}) 

pkg_check_modules(SOUP REQUIRED libsoup-2.4) 
include_directories(${SOUP_INCLUDE_DIRS}) 
link_directories(${SOUP_LIBRARY_DIRS}) 
add_definitions(${SOUP_CFLAGS_OTHER}) 

target_link_libraries(
     CVE_2016_4657 
     ${GTK3_LIBRARIES} 
     ${SOUP_LIBRARIES}) 

然而,編譯項目的時候,我發現了以下錯誤:

[ 50%] Linking CXX executable CVE_2016_4657 
CMakeFiles/CVE_2016_4657.dir/main.cpp.o: In function `main': 
/home/idanas/CLionProjects/Switcheroo/main.cpp:17: undefined reference to 
`webkit_web_view_get_type' 
/home/idanas/CLionProjects/Switcheroo/main.cpp:17: undefined reference to 
`webkit_web_view_new' 
/home/idanas/CLionProjects/Switcheroo/main.cpp:29: undefined reference to 
`webkit_web_view_load_uri' 
collect2: error: ld returned 1 exit status 
CMakeFiles/CVE_2016_4657.dir/build.make:94: recipe for target 
'CVE_2016_4657' failed 
make[3]: *** [CVE_2016_4657] Error 1 
CMakeFiles/Makefile2:67: recipe for target 
'CMakeFiles/CVE_2016_4657.dir/all' failed 
make[2]: *** [CMakeFiles/CVE_2016_4657.dir/all] Error 2 
CMakeFiles/Makefile2:79: recipe for target 
'CMakeFiles/CVE_2016_4657.dir/rule' failed 
make[1]: *** [CMakeFiles/CVE_2016_4657.dir/rule] Error 2 
Makefile:118: recipe for target 'CVE_2016_4657' failed 
make: *** [CVE_2016_4657] Error 2 

我對CMake幾乎沒有任何經驗,可以真正使用一些幫助。

+0

[CMake鏈接到外部庫]的可能的副本(https://stackoverflow.com/questions/8774593/cmake-link-to-external-library) – Tsyvarev

+0

不是該特定問題的重複。 – andlabs

+0

我同意WebKitGTK +有額外的(和*優先* *)方式與鏈接。但似乎應該重新考慮這個問題,至少它的標題應該包含圖書館的名稱。另一方面,'pkg_check_modules'方法適用於很多庫,可能應該在重複問題的答案中註明... – Tsyvarev

回答

2

您正在嘗試使用WebKitGTK +,它是來自GTK +和libsoup的獨立庫。您需要爲WebKitGTK +再次複製您的pkg_check_modules()代碼。您需要首先確定您是使用WebKit1還是WebKit2(它們有不同的API),然後爲該版本的WebKitGTK +找到合適的pkg-config名稱;檢查您的/usr/lib/pkgconfig目錄的文檔和內容。

+0

我沒有使用'pkg_check_modules()'的原因是庫是我需要一個非常特定的(舊)構建的WebkitGTK +,而WebkitGTK +也需要SOUP和GTK(作爲單獨的庫),這本身就沒有用處。 – iDaN5x

+0

請注意API是webkit2 – iDaN5x

+0

這個.lib文件是靜態鏈接的嗎?如果你想這樣做,你可能也需要自己提供WebKit2GTK +二進制文件...你也可以問開發者是否可以靜態鏈接。最新版本的WebKit2GTK +有什麼問題? – andlabs

相關問題