2017-05-31 1 views
0

Dans le cadre d'un projet sur lequel je travaille, je dois utiliser la bibliothèque WebKitGTK +. J'ai téléchargé la bibliothèque (tarball) et l'ai compilé comme décrit here.Impossible d'ajouter une bibliothèque compilée localement au projet CMake

Après la compilation a été fait:
têtes de lib sont /usr/local/include.
Les fichiers .so de la bibliothèque sont dans /usr/local/lib.

Dans mon projet C++ j'ai essayé d'ajouter le fichier CMakeLists.txt suivant:

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}) 

Cependant, lors de la compilation du projet, je reçois l'erreur suivante:

[ 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 

I ont peu d'expérience avec CMake et pourraient vraiment utiliser de l'aide.

+0

Copie possible de [Lien CMake vers la bibliothèque externe] (https://stackoverflow.com/questions/8774593/cmake-link-to-external-library) – Tsyvarev

+0

Pas un doublon de cette question spécifique. – andlabs

+0

Je suis d'accord que WebKitGTK + a un moyen supplémentaire (et * préférable *) pour le lien avec. Mais il semble que la question devrait être reformulée, au moins son titre devrait contenir le nom de la bibliothèque. De l'autre côté, l'approche 'pkg_check_modules' convient à beaucoup de bibliothèques, il faut probablement le noter dans la réponse à la question en double ... – Tsyvarev

Répondre

2

Vous essayez d'utiliser WebKitGTK +, qui est une bibliothèque distincte de GTK + et de libsoup. Vous devrez à nouveau dupliquer votre code pkg_check_modules() pour WebKitGTK +. Vous devrez d'abord déterminer si vous utilisez WebKit1 ou WebKit2 (ils ont des API subtilement différentes), puis trouver le nom pkg-config approprié pour cette version de WebKitGTK +; consultez la documentation et le contenu de votre répertoire /usr/lib/pkgconfig.

+0

La raison pour laquelle je n'utilise pas' pkg_check_modules() 'est que la bibliothèque est compilé localement par moi (et donc situé sous '/ usr/local/...'. J'ai besoin d'une version très spécifique (ancienne) de WebkitGTK + .POUP et GTK sont également nécessaires (en tant que bibliothèques séparées) car WebkitGTK + est inutile. – iDaN5x

+0

Notez que l'API est webkit2 – iDaN5x

+0

Est-ce que ce fichier .lib est lié statiquement? Si vous voulez faire cela, vous devrez peut-être aussi fournir les binaires WebKit2GTK + ... Vous pouvez demander aux développeurs si la liaison statique est également possible. Quel est le problème avec les dernières versions de WebKit2GTK +? – andlabs