PythonLibs crash au démarrage de l'application
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:
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:
Code:
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;
} |
comme on peut le voir, il n'y a pas d'appel à la fonction `f()`. Or le code compile mais le programme crash.
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
Code:
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. |
ps2: résultat de la compilation
Code:
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. |
ps3: résultat de l'execution vu par la console Qt (pas grand chose d'interressant)
Code:
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. |
ps4: résultat de la compilation vu du bash pour git:
Code:
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 |
ps5: résultat de la compilation vu de l'invite de commande windows: apparition d'une boite de message
Code:
L'application n'a pas réussi à démarrer correctement 0xc000007b. Cliquez OK pour fermer l'application
ps6: je mets quand même le résultat du Path même si je pense que c'est inutile
Code:
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; |