#1 Le 30/03/2020, à 10:59
- loloof64
[Résolu][C++][CMake][WxWidgets] Problème de linkage
Bonjour,
J'ai un soucis d'édition de lien pour une application personnelle, en C++/WxWidgets/CMake.
Voici tout d'abord l'erreur, à noter que j'ai crée un sous-dossier build, et que j'ai auparavant lancé la commande "cmake .."
ProjRoot/build$ make -j 4
[ 50%] Building CXX object CMakeFiles/SimpleHello.dir/src/gui/gui.cpp.o
[ 50%] Building CXX object CMakeFiles/SimpleHello.dir/src/gui/wxform_generated.cpp.o
[ 75%] Building CXX object CMakeFiles/SimpleHello.dir/src/main.cpp.o
[100%] Linking CXX executable SimpleHello
/usr/bin/ld : ne peut trouver -lwx_gtk2u_core-3.0
/usr/bin/ld : ne peut trouver -lwx_baseu-3.0
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/SimpleHello.dir/build.make:114: SimpleHello] Error 1
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/SimpleHello.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
CMakeLists.txt
project(SimpleHello)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -static")
find_package(wxWidgets COMPONENTS core base REQUIRED)
include(${wxWidgets_USE_FILE})
add_executable(
${PROJECT_NAME}
src/gui/wxform_generated.h
src/gui/wxform_generated.cpp
src/gui/gui.h
src/gui/gui.cpp
src/main.cpp
)
target_link_libraries(
${PROJECT_NAME}
PUBLIC ${wxWidgets_LIBRARIES}
)
Voici la liste des paquets wx actifs
ProjRoot/build$ sudo dpkg -l "*wx*
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom Version Architecture Description
+++-======================-=============-============-===========================================================================
un libwxbase3.0-0 <aucune> <aucune> (aucune description n'est disponible)
ii libwxbase3.0-0v5:amd64 3.0.4+dfsg-12 amd64 wxBase library (runtime) - non-GUI support classes of wxWidgets toolkit
ii libwxbase3.0-dev:amd64 3.0.4+dfsg-12 amd64 wxBase library (development) - non-GUI support classes of wxWidgets toolkit
un libwxgtk2.8-dev <aucune> <aucune> (aucune description n'est disponible)
un libwxgtk3.0-0 <aucune> <aucune> (aucune description n'est disponible)
ii libwxgtk3.0-0v5:amd64 3.0.4+dfsg-12 amd64 wxWidgets Cross-platform C++ GUI toolkit (GTK 2 runtime)
ii libwxgtk3.0-dev:amd64 3.0.4+dfsg-12 amd64 wxWidgets Cross-platform C++ GUI toolkit (GTK 2 development)
ii wx-common 3.0.4+dfsg-12 amd64 wxWidgets Cross-platform C++ GUI toolkit (common support files)
un wx3.0-doc <aucune> <aucune> (aucune description n'est disponible)
ii wx3.0-headers 3.0.4+dfsg-12 all wxWidgets Cross-platform C++ GUI toolkit (header files)
un wxcrafter <aucune> <aucune> (aucune description n'est disponible)
Voici les versions présentes de wx-config
ProjRoot/build$ locate wx-config
/etc/alternatives/wx-config
/home/laurent-bernabe/Documents/Programmation/Librairies/Cpp/wxWidgets-3.1.3/wx-config-inplace.in
/home/laurent-bernabe/Documents/Programmation/Librairies/Cpp/wxWidgets-3.1.3/wx-config.in
/usr/bin/wx-config
/usr/share/man/man1/wx-config.1.gz
/var/lib/dpkg/alternatives/wx-config
Voici les "dll" wxWidgets installées
ProjRoot/build$ ls -lh /usr/lib/x86_64-linux-gnu/libwx*
lrwxrwxrwx 1 root root 20 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so -> libwx_baseu-3.0.so.0
lrwxrwxrwx 1 root root 24 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0 -> libwx_baseu-3.0.so.0.4.0
-rw-r--r-- 1 root root 2,8M sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0.4.0
lrwxrwxrwx 1 root root 24 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu_net-3.0.so -> libwx_baseu_net-3.0.so.0
lrwxrwxrwx 1 root root 28 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu_net-3.0.so.0 -> libwx_baseu_net-3.0.so.0.4.0
-rw-r--r-- 1 root root 296K sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu_net-3.0.so.0.4.0
lrwxrwxrwx 1 root root 24 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu_xml-3.0.so -> libwx_baseu_xml-3.0.so.0
lrwxrwxrwx 1 root root 28 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu_xml-3.0.so.0 -> libwx_baseu_xml-3.0.so.0.4.0
-rw-r--r-- 1 root root 71K sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_baseu_xml-3.0.so.0.4.0
lrwxrwxrwx 1 root root 24 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_adv-3.0.so -> libwx_gtk2u_adv-3.0.so.0
lrwxrwxrwx 1 root root 28 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_adv-3.0.so.0 -> libwx_gtk2u_adv-3.0.so.0.4.0
-rw-r--r-- 1 root root 2,0M sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_adv-3.0.so.0.4.0
lrwxrwxrwx 1 root root 24 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_aui-3.0.so -> libwx_gtk2u_aui-3.0.so.0
lrwxrwxrwx 1 root root 28 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_aui-3.0.so.0 -> libwx_gtk2u_aui-3.0.so.0.4.0
-rw-r--r-- 1 root root 641K sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_aui-3.0.so.0.4.0
lrwxrwxrwx 1 root root 25 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so -> libwx_gtk2u_core-3.0.so.0
lrwxrwxrwx 1 root root 29 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0 -> libwx_gtk2u_core-3.0.so.0.4.0
-rw-r--r-- 1 root root 6,6M sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0.4.0
lrwxrwxrwx 1 root root 23 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_gl-3.0.so -> libwx_gtk2u_gl-3.0.so.0
lrwxrwxrwx 1 root root 27 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_gl-3.0.so.0 -> libwx_gtk2u_gl-3.0.so.0.4.0
-rw-r--r-- 1 root root 100K sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_gl-3.0.so.0.4.0
lrwxrwxrwx 1 root root 25 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_html-3.0.so -> libwx_gtk2u_html-3.0.so.0
lrwxrwxrwx 1 root root 29 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_html-3.0.so.0 -> libwx_gtk2u_html-3.0.so.0.4.0
-rw-r--r-- 1 root root 898K sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_html-3.0.so.0.4.0
lrwxrwxrwx 1 root root 29 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_propgrid-3.0.so -> libwx_gtk2u_propgrid-3.0.so.0
lrwxrwxrwx 1 root root 33 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_propgrid-3.0.so.0 -> libwx_gtk2u_propgrid-3.0.so.0.4.0
-rw-r--r-- 1 root root 994K sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_propgrid-3.0.so.0.4.0
lrwxrwxrwx 1 root root 23 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_qa-3.0.so -> libwx_gtk2u_qa-3.0.so.0
lrwxrwxrwx 1 root root 27 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_qa-3.0.so.0 -> libwx_gtk2u_qa-3.0.so.0.4.0
-rw-r--r-- 1 root root 204K sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_qa-3.0.so.0.4.0
lrwxrwxrwx 1 root root 27 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_ribbon-3.0.so -> libwx_gtk2u_ribbon-3.0.so.0
lrwxrwxrwx 1 root root 31 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_ribbon-3.0.so.0 -> libwx_gtk2u_ribbon-3.0.so.0.4.0
-rw-r--r-- 1 root root 544K sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_ribbon-3.0.so.0.4.0
lrwxrwxrwx 1 root root 29 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_richtext-3.0.so -> libwx_gtk2u_richtext-3.0.so.0
lrwxrwxrwx 1 root root 33 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_richtext-3.0.so.0 -> libwx_gtk2u_richtext-3.0.so.0.4.0
-rw-r--r-- 1 root root 2,0M sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_richtext-3.0.so.0.4.0
lrwxrwxrwx 1 root root 24 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_stc-3.0.so -> libwx_gtk2u_stc-3.0.so.0
lrwxrwxrwx 1 root root 28 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_stc-3.0.so.0 -> libwx_gtk2u_stc-3.0.so.0.4.0
-rw-r--r-- 1 root root 2,3M sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_stc-3.0.so.0.4.0
lrwxrwxrwx 1 root root 24 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_xrc-3.0.so -> libwx_gtk2u_xrc-3.0.so.0
lrwxrwxrwx 1 root root 28 sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_xrc-3.0.so.0 -> libwx_gtk2u_xrc-3.0.so.0.4.0
-rw-r--r-- 1 root root 1,1M sept. 9 2019 /usr/lib/x86_64-linux-gnu/libwx_gtk2u_xrc-3.0.so.0.4.0
Quelques infos système et autres
$> uname -a
Linux bordeaux80 5.3.0-42-generic #34-Ubuntu SMP Fri Feb 28 05:49:40 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 19.10
Release: 19.10
Codename: eoan
$> gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.2.1-9ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)
Surtout demandez-moi si j'ai oublié quelque chose, le code source ne devrait pas être nécessaire à mon avis, étant donné que la compilation a réussie.
#Edit information importante
Je pense que c'est dû au fait que j'ai plusieurs versions de WxWidgets installées, et que GCC ne s'y retrouve plus.
Pour l'anecdote, j'ai d'abord essayé d'installer et désinstaller WxWidgets d'après les sources, j'ai aussi installé/désinstallé Codelite, qui installe notamment wxcrafter et certainement sa propre version de WxWidgets, j'ai installé WxFormBuilder via un flatPak, et j'ai installé le paquet deb wxwidgets 3. Si cela peut être la cause du problème.
#Fin de l'edit
# Edit 2
J'ai oublier de communiquer la version de CMake
$> cmake --version
cmake version 3.13.4
CMake suite maintained and supported by Kitware (kitware.com/cmake).
Mais aussi bizarement, j'ai réussi à compiler le programme "à la main" à partir des fichiers objets qui ont été générés
ProjRoot/build/CMakeFiles/SimpleHello.dir/src $> g++ main.cpp.o gui/gui.cpp.o gui/wxform_generated.cpp.o `wx-config --cxxflags --libs` -o result
et le fichier result est bien l'éxécutable attendu qui fonctionne. (Surprise !)
Reste à comprendre pourquoi le Makefile généré ne parvient pas à produire l'exécutable
# Fin de l'edit 2
Je vous remercie d'avance pour votre aide
Dernière modification par loloof64 (Le 30/03/2020, à 16:42)
Hors ligne
#2 Le 30/03/2020, à 16:42
- loloof64
Re : [Résolu][C++][CMake][WxWidgets] Problème de linkage
Ca y est, j'ai trouvé
Il y a une erreur dans le script cmake : "-static". (ligne 3)
J'en avais besoin lors de mes expérimentations pour produire un exécutable statique, mais j'ai depuis changé d'avis.
Par conséquent ce "switch" est à retirer.
Dernière modification par loloof64 (Le 30/03/2020, à 16:43)
Hors ligne