Qt OpenGL dans CLion

Qt OpenGL dans CLion

par Léonard Georges Théodore Lebrun,
Number of replies: 3

Bonjour, 

Je signale un problème que je rencontre lorsque j'essaye de compiler l'ex05 du tutoriel graphique.


J'utilise Clion pour coder en C++ et souhaiterait ne pas passer par qtcreator, moins confortable à mon goût.

Clion utilise cmake. Voici mon CMakeFiles actuel:


cmake_minimum_required(VERSION 3.15)
project(Toupies_DL)

ADD_DEFINITIONS(-std=c++14 )

set(CMAKE_CXX_STANDARD 14)


find_package(Qt5 COMPONENTS Widgets Core Gui Multimedia REQUIRED)
find_package(Qt5OpenGL REQUIRED)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)



add_definitions(${QT_DEFINITIONS})

[...]
add_executable(ex5
${QtFILES}
ex_05/Qt_GL/main_qt_gl.cc)

qt5_use_modules(ex5 Widgets OpenGL)


target_link_libraries(ex5 Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Multimedia)
target_link_libraries(ex5 Qt5::OpenGL)

où QtFILES contient tous les fichiers envoyés dans le zip du tutoriel.

Mais à la compilation, Clion renvoie : 

CMakeFiles\ex5.dir/objects.a(glwidget.cc.obj): In function `ZN8GLWidget8resizeGLEii':
C:/Users/lgtle/Desktop/C++/programmes/projet/Toupies-DL/Toupies-DL/ex_05/Qt_GL/glwidget.cc:20: undefined reference to `_imp__glViewport@16'
CMakeFiles\ex5.dir/objects.a(glwidget.cc.obj): In function `ZN8GLWidget7paintGLEv':
C:/Users/lgtle/Desktop/C++/programmes/projet/Toupies-DL/Toupies-DL/ex_05/Qt_GL/glwidget.cc:39: undefined reference to `_imp__glClear@4'
CMakeFiles\ex5.dir/objects.a(vue_opengl.cc.obj): In function `ZN9VueOpenGL4initEv':
C:/Users/lgtle/Desktop/C++/programmes/projet/Toupies-DL/Toupies-DL/ex_05/Qt_GL/vue_opengl.cc:83: undefined reference to `_imp__glEnable@4'
C:/Users/lgtle/Desktop/C++/programmes/projet/Toupies-DL/Toupies-DL/ex_05/Qt_GL/vue_opengl.cc:84: undefined reference to `_imp__glEnable@4'
CMakeFiles\ex5.dir/objects.a(vue_opengl.cc.obj): In function `ZN9VueOpenGL11dessineCubeERK10QMatrix4x4':
C:/Users/lgtle/Desktop/C++/programmes/projet/Toupies-DL/Toupies-DL/ex_05/Qt_GL/vue_opengl.cc:125: undefined reference to `_imp__glBegin@4'
C:/Users/lgtle/Desktop/C++/programmes/projet/Toupies-DL/Toupies-DL/ex_05/Qt_GL/vue_opengl.cc:168: undefined reference to `_imp__glEnd@0'
collect2.exe: error: ld returned 1 exit status

Il ne semble pas identifier les méthodes d'OpenGL. J'ai pourtant copié et placé à proximité les librairies dll nécessaires. Que dois-je faire??

Merci d'avance pour votre aide!
Léonard

 

In reply to Léonard Georges Théodore Lebrun

Re: Qt OpenGL dans CLion

par Deleted user,

Salut!

Vu ta version de CMake, les lignes suivantes sont redondantes (et pourraient causer des erreurs?). Essaye déjà en utilisant juste target_link_librairies.

add_definitions(${QT_DEFINITIONS})
qt5_use_modules(ex5 Widgets OpenGL)

Un autre groupe (sous Windows, https://moodlearchive.epfl.ch/2019-2020/mod/forum/discuss.php?d=29689) a eu des problèmes avec CMake. Notamment, il a fallu appeler le programme utilitaire winqtdeploy après compilation (donc ce n'est pas encore ta situation, mais ça pourra peut-être t'aider par la suite).

In reply to Deleted user

Re: Qt OpenGL dans CLion

par Léonard Georges Théodore Lebrun,

Merci pour ton aide, le problème s'est résolu en ajoutant le package openGL, tout simplement.

A présent, le compilateur affiche :  undefined reference to `qt_static_plugin_QWindowsIntegrationPlugin()'

Je précise que je suis sur windows et que j'ai dû copier à la main dans le dossier cmake-build-debug toutes les dll nécessaires jusqu'ici. j'en aurais oublié une?


Merci d'avance et bon week-end!

Léonard

In reply to Léonard Georges Théodore Lebrun

Re: Qt OpenGL dans CLion

par Deleted user,

Une chose m'étonne toujours, tu ne devrais pas avoir à copier toi-même des DLLs (sauf post-compilation, et c'est la dernière instruction dans ton CMakeLists). À moins que tu aies une bonne raison de le faire, laisse winqtdeploy s'en charger.

De plus, DLL = Dynamic Link Library. Je ne suis pas un expert avec Windows, mais si le lien est dynamique, tu devrais avoir des erreurs uniquement à l'exécution de ton programme, pas la compilation (en opposition aux liens statiques que vous utilisez normalement).

Par ailleurs, dans le CMakeLists que tu nous fournis, il reste pathToWindeployqt que tu dois remplacer par un chemin d'accès complet. Il se trouve dans le dossier bin de Qt normalement. Vérifie peut-être également ce qui se trouve dans PATH si tu n'y as pas touché.


Dans la plupart des sources que j'ai consulté, la directive

set(CMAKE_INCLUDE_CURRENT_DIR ON)

est aussi donnée. Elle sert à inclure les fichiers générés par les "routines" AUTOMOC/UIC/RCC. Ça pourrait peut-être correspondre à ton erreur?