Bonjour,
Tout d'abord, je travaille sur Windows avec QTCreator comme EDI
- j'utilise MinGW73-64 que j'ai installé en même temps que Qt 5.13.0
J'ai effectué un test pour utiliser des scripts Python embarqués dans une application C++ et je me heurte à des difficultés.
J'ai commencé par installer Python 3.8, avec toutes les options (je n'ai pas pris de risque, ne sachant pas ce qui est nécessaire ou optionnel).
- version 64 bits: *Windows x86-64 executable installer* sur la page https://www.python.org/downloads/release/python-380/)
J'ai ensuite écrit le fichier CMakeList suivant:
Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 cmake_minimum_required(VERSION 3.5) project(PythonTest LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(PythonInterp 3.8 REQUIRED) find_package(PythonLibs 3.8 REQUIRED) include_directories(${PYTHON_INCLUDE_DIRS}) message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}") message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}") message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}") message(STATUS "PYTHON_FRAMEWORK_INCLUDES=${PYTHON_FRAMEWORK_INCLUDES}") message(STATUS "PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}") message(STATUS "Python_FRAMEWORKS=${Python_FRAMEWORKS}") add_executable(PythonTest main.cpp) target_link_libraries(PythonTest ${PYTHON_LIBRARIES})
puis j'ai écris le code suivant:
comme on peut le voir, il n'y a pas d'appel à la fonction `f()`. Or le code compile mais le programme crash.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <iostream> #include "Python.h" void f() { Py_Initialize(); } int main(int argc, char *argv[]) { std::cout <<"test" << std::endl; return 0; }
Maintenant, si je commente la ligne `Py_Initialize();`. Le code compile et le programme fonctionne correctement.
J'en déduit qu'à l'initialisation du programme, le lien vers la librairie Python n'existe pas et que l'application se met à crasher.
j'ai tenté diverses choses, mais sans résultat:
- copie des dll dans le même dossier que l'executable généré;
- j'ai vérifié que le chemin vers la dll existait déjà dans la variable d'environnement PATH (C:/Program Files/Python38/) ce qui avait été fait via une option lors de l'installation de Python.
Je bloque ici et je demande donc votre avis.
Cordialement,
ps: voici le résultat de l'execution de CMake
ps2: résultat de la compilation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Starting to parse CMake project. PYTHON_LIBRARIES = optimized;C:/Program Files/Python38/python38.dll;debug;C:/Program Files/Python38/python38_d.dll PYTHON_EXECUTABLE = C:/Program Files/Python38/python.exe PYTHON_INCLUDE_DIRS = C:/Program Files/Python38/include PYTHON_FRAMEWORK_INCLUDES= PYTHONLIBS_VERSION_STRING=3.8.0 Python_FRAMEWORKS= Configuring done Generating done CMake Warning: Manually-specified variables were not used by the project: CMAKE_C_COMPILER QT_QMAKE_EXECUTABLE CMake Project was parsed successfully.
ps3: résultat de l'execution vu par la console Qt (pas grand chose d'interressant)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 14:53:06: Le processus "C:\Program Files\CMake\bin\cmake.exe" s'est terminé normalement. 14:53:06: Débute : "C:\Program Files\CMake\bin\cmake.exe" --build . --target all [ 50%] Building CXX object CMakeFiles/PythonTest.dir/main.cpp.obj [100%] Linking CXX executable PythonTest.exe [100%] Built target PythonTest 14:53:07: Le processus "C:\Program Files\CMake\bin\cmake.exe" s'est terminé normalement. 14:53:07: Temps écoulé : 00:01.
ps4: résultat de la compilation vu du bash pour git:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 15:02:12: Starting C:\Users\v\Sources\build-PythonTest-Desktop_Qt_5_13_0_MinGW_64_bit-Debug\PythonTest.exe ... 15:02:12: Le programme s'est terminé subitement. 15:02:12: The process was ended forcefully. 15:02:12: C:/Users/v/Sources/build-PythonTest-Desktop_Qt_5_13_0_MinGW_64_bit-Debug/PythonTest.exe crashed.
ps5: résultat de la compilation vu de l'invite de commande windows: apparition d'une boite de message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ ./PythonTest.exe C:/Users/v/Sources/build-PythonTest-Desktop_Qt_5_13_0_MinGW_64_bit-Debug/PythonTest.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory
ps6: je mets quand même le résultat du Path même si je pense que c'est inutile
Code : Sélectionner tout - Visualiser dans une fenêtre à part L'application n'a pas réussi à démarrer correctement 0xc000007b. Cliquez OK pour fermer l'application
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 C:\Qt\Tools\mingw730_64\bin; C:\Program Files\Python38\Scripts\; C:\Program Files\Python38\; C:\Program Files (x86)\Common Files\Oracle\Java\javapath; C:\Program Files (x86)\Eziriz\.NET Reactor; C:\Program Files (x86)\Intel\iCLS Client\; C:\Program Files\Intel\iCLS Client\; C:\WINDOWS\system32; C:\WINDOWS; C:\WINDOWS\System32\Wbem; C:\WINDOWS\System32\WindowsPowerShell\v1.0\; C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL; C:\Program Files\Intel\Intel(R) Management Engine Components\DAL; C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT; C:\Program Files\doxygen\bin; C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\; C:\Program Files\Microsoft SQL Server\110\Tools\Binn\; C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\; C:\Program Files\Microsoft SQL Server\120\Tools\Binn\; C:\Program Files (x86)\Windows Live\Shared; C:\Program Files\MiKTeX 2.9\miktex\bin\x64\; C:\Qt\5.7\mingw53_32\bin; c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\; C:\Program Files (x86)\Asymptote; C:\Program Files (x86)\LyX 2.2\Perl\bin; C:\WINDOWS\System32\OpenSSH\; C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\; C:\Program Files\CMake\bin; C:\Program Files\Intel\WiFi\bin\; C:\Program Files\Common Files\Intel\WirelessCommon\; C:\Users\v\AppData\Local\Microsoft\WindowsApps;
Partager