2017-05-31 95 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

相关问题