IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques Discussion :

PythonLibs crash au démarrage de l'application


Sujet :

Bibliothèques

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut 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 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:

    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;
    }
    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 : 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.
    ps2: résultat de la compilation
    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.
    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
    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 : 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
    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
    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 : 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;

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    Je pensais que le problème provenait d'un lien entre mon application et la librairie Python,

    En utilisant le logiciel "Dependency Walker", je remarque que la librairie python est bien reconnue mais que cette librairie utilise des DLL qui ne le sont pas.

    Elle porte des noms du type: `API-MS-WIN-CORE-VERSION-L1-1-0.DLL` et il il en a plus de 500 liens manquants.

    Je me fais une remarque supplémentaire: j'ai oublié de préciser que je suis en mode debug, donc la DLL de python utilisée est 'PYTHON38_D.DLL', je vois d'ailleurs que certaines DLLs manquantes contiennent le terme 'DEBUG'.

    J'ai donc fait un test supplémentaire: execution du programme en mode Release (ce que je n'avais pas encore fait) et maintenant ça fonctionne (en tout cas, ça ne crash plus).

    Néanmoins, j'ai quand même besoin du mode DEBUG. J'ai donc démarré de nouveau l'installateur de Python et désinstallé les binaires de Debug pour qu'ils ne soient pas utilisés en mode debug.

    Je crois comprendre que les DLLs manquantes proviennent de VS2015, qui n'est pas installé sur ma machine.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.0 SP2] Crash au démarrage : Faulting application
    Par mister3957 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 19/02/2010, 20h11
  2. Réponses: 3
    Dernier message: 14/11/2005, 13h15
  3. Réponses: 18
    Dernier message: 03/11/2005, 13h00
  4. Réponses: 4
    Dernier message: 11/10/2005, 21h08
  5. Réponses: 5
    Dernier message: 31/01/2005, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo