Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/03/2020, à 11: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, à 17:42)

Hors ligne

#2 Le 30/03/2020, à 17:42

loloof64

Re : [Résolu][C++][CMake][WxWidgets] Problème de linkage

Ca y est, j'ai trouvé smile

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, à 17:43)

Hors ligne