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

Interfaçage autre langage Python Discussion :

C++ -> Python : iostream plantage


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    sans
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut C++ -> Python : iostream plantage
    Bonjour a tous,

    Je viens de me remettre au C++ afin de faire des libraires (.so) qui seront appelées par python.
    J'ai commencé par faire des tests avec des fonctions simples et ça fonctionne c'est cool.
    Mais j'ai un petit soucis avec une librairie : <iostream> qui fait tout planter lorsque je la déclare. Le simple fait d'ajouter ce fichier me fait planter du coté du python avec une jolie erreur :

    OSError: /home/pi/WoodMan/lib/access_level.so: undefined symbol: _ZNSt8ios_base4InitD1Ev
    Quelqu'un pourrait m'expliquer pourquoi ?

    Merci.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    D'où provient access_level.so ? C'est du CPython que tu as compilé toi-même ?

    Un symbole non définit peut provenir du fait que tu as une lib machin-0.1 utile a ton code mais le header machin.h serait la version 0.2 et définit ce symbole qui n'existait pas dans la version 0.1.

    Si tu fais objdump -T access.level.so tu retrouves ce symbole ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    sans
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    C'est une bibliotheque en C que j'a créée pour faire des essais compilée en .so

    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
     
    access_level.so:     format de fichier elf32-littlearm
     
    DYNAMIC SYMBOL TABLE:
    000004e8 l    d  .init	00000000              .init
    00010f1c l    d  .jcr	00000000              .jcr
    00000000      DF *UND*	00000000  GLIBC_2.4   strcmp
    00000000  w   DF *UND*	00000000  GLIBC_2.4   __cxa_finalize
    00000000  w   D  *UND*	00000000              _ITM_deregisterTMCloneTable
    00000000      D  *UND*	00000000              _ZNSt8ios_base4InitD1Ev
    00000000  w   D  *UND*	00000000              __gmon_start__
    00000000      D  *UND*	00000000              _ZNSt8ios_base4InitC1Ev
    00000000  w   D  *UND*	00000000              _Jv_RegisterClasses
    00000000  w   D  *UND*	00000000              _ITM_registerTMCloneTable
    00000000      DF *UND*	00000000  GLIBC_2.4   __aeabi_atexit
    00011048 g    D  .bss	00000000  Base        _bss_end__
    00011040 g    D  .data	00000000  Base        _edata
    00000710 g    DF .text	00000074  Base        _Z8afficherPc
    00011048 g    D  .bss	00000000  Base        _end
    00000784 g    DF .text	00000004  Base        afficher2
    00011048 g    D  .bss	00000000  Base        __bss_end__
    00011040 g    D  .bss	00000000  Base        __bss_start
    000004e8 g    DF .init	00000000  Base        _init
    00011040 g    D  .bss	00000000  Base        __bss_start__
    00000788 g    DF .fini	00000000  Base        _fini
    00011048 g    D  .bss	00000000  Base        __end__
    OSError: /home/pi/WoodMan/lib/bordel/access_level.so: undefined symbol: _ZNSt8ios_base4InitD1Ev


    Oui je le retrouve bien. Et c'est bien #include <iostream> qui plante le programme. Faut il le mettre a jour ? (en fait je n'en ai pas besoin je posais la question pour essayer de comprendre pourquoi ce fichier fait planter le code)

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Bonsoir,

    Si tu fais cela avec ctypes, tu peux oublier le C++.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre à l'essai
    Homme Profil pro
    sans
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Ah bon ça ne fonctionne pas avec le c++ ? Pour quelles raisons ?

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Parce que ctypes est un module utilisant que les types C.

    Tu peux regarder du côté de cython, pour le C++
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre à l'essai
    Homme Profil pro
    sans
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    ok, merci pour vos réponses je vais aller voir de plus près cython ;o)

Discussions similaires

  1. [Python 3.X] PLANTAGE PYTHON.EXE INVALID BLOCK
    Par jouclar dans le forum Général Python
    Réponses: 6
    Dernier message: 27/02/2015, 13h46
  2. Plantage avec Boost.Python
    Par GeantVert13 dans le forum C++
    Réponses: 3
    Dernier message: 05/07/2012, 14h54
  3. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  4. Réponses: 7
    Dernier message: 20/08/2003, 10h33
  5. [Kylix] Plantage IDE Kylix3/Mandrake 9.0
    Par OmicroN dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2003, 23h04

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