Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cython problème de commande

    24 juillet 2013 à 0:58:43

    Bonjour,j'aurais besoin de votre aide pour résoudre un problème embêtant.

    Je code en Python3(3.3.2) et histoire de rendre le code un petit peut plus rapide,j'ai voulue utiliser Cython(Version Python 3.3.2/W32,j'ai aussi essayer le 64,idem pour python et mingw,même probléme),je précise que je suis sur Windows 7/64(j'ai voulue installer Linux a mainte reprise,car il parait que c'est plus facile,mais écran multicolore,bug session,freez etc...),bref j'ai installer Cython et MinGW car ils sont complémentaire(Cython télécharger http://www.lfd.uci.edu/~gohlke/pythonlibs/)et Mingw c'est a partir de son installateur Windows,j'ai bien régler les PATH(utilisateur et système) correctement,donc ensuite je fait un aaa.py auquel je change le nom en aaa.pyx puis avec la commande python setup.py build_ext --inplace(le setup.py contient le aaa.pyx,comme expliquer dans leurs tuto),jusque la tout va bien,la console ne me sort aucune erreur et me donne mon fichier aaa.c,ensuite je dois passer par gcc pour le compiler,je vais donc dans la console et je me rend la ou est mon fichier(toujours dans C:/Python33),je lance la commande g++ aaa.c -o aaa.exe,pour qu'il convertisse le aaa.c en aaa.exe mais la console me sort des dizaines de lignes incompréhensible pour moi:

    http://pastebin.com/7iu2X67Q

    J'ai chercher en vain sur internet,alors si vous pourriez m'aider svp?

    -
    Edité par Yroz 24 juillet 2013 à 2:31:53

    • Partager sur Facebook
    • Partager sur Twitter
      24 juillet 2013 à 1:04:51

      En C, un undefined reference a lieu quand le compilateur cherche le corps (ce que contient) une fonction mais ne la trouve pas. Dans ton cas, il ne trouve pas la lib de python. Ne t'inquiète pas, rien de grave :D

      Pour régler sa, tu fait 

      g++ aaa.c -o program -lpython3.3 -L<chemin vers un libpython33.dll> -I<chemin vers le dossier include qui se situe dans le dossier de python>

      Vérifie aussi que aaa.c a été obtenue par la commande suivante :

      cython.py --embed --compiler=mingw32 aaa.pyx

      ps : si il te dit qu'il ne trouve pas une certaine fonction WinMain, remplace --embed par --embed=WinMain et recompile.

      Une dernière chose : tu n'ai pas obligé de convertir tes .py en .pyx : cython le fait pour toi

      • Partager sur Facebook
      • Partager sur Twitter
        24 juillet 2013 à 1:17:05

        Wouaw déjà une réponse,j'aurais du venir plutôt^^,j'avais pas compris,moi je changer juste le nom du fichier en .pyx manuellement,mais j'ai essayer ta commande et il me dit que Cython n'est pas reconnu en tant que commande interne ou externe(un problème de path ou d'installation?)
        • Partager sur Facebook
        • Partager sur Twitter
          24 juillet 2013 à 1:22:07

          un problème de path oui (et oui les programmes sous Windows ne sont pas dans le path :p ). Tu trouveras cython.py dans <dossier vers Python>\Lib\site-packages de mémoire (à un s près :p ). J'ai simplement dit que tu n'étais pas obligé de renommer ton .py en un .pyx si tu n'utilises que python.

          -
          Edité par FirstZero 24 juillet 2013 à 1:22:53

          • Partager sur Facebook
          • Partager sur Twitter
            24 juillet 2013 à 1:49:18

            C'etait bien ca ouf^^,par contre je ne suis pas habituer au commande dans le console aussi j'ai taper celle que tu me conseille comme ceci:

            g++ aaa.c -o program -lpython3.3 -L<C:\python33\libs\libpython33.lib> -I<C:\python33\include\>


            et aussi comme ça :


            g++ aaa.c -o program -lpython3.3 -L C:\python33\libs\libpython33.lib -I C:\python33\include\


            Mais la console me dit : 

            collect2.exe: erreur: Id a retourné 1 code d'état d'exécution,la commande n'a pas la bonne syntaxe ou je me suis tromper avec les chemins?

            • Partager sur Facebook
            • Partager sur Twitter
              24 juillet 2013 à 1:58:33

              dans -L il faut spécifié le dossier où se situe le .dll, par le chemin vers ce point DLL

              ensuite c'est -lpython33 , pas -lpython3.3 :)

              ps : il fallait bien retirer les '<' :)

              • Partager sur Facebook
              • Partager sur Twitter
                24 juillet 2013 à 2:26:57

                Décidément ça n'en finira jamais^^,je ne trouve pas de libpython33.dll,seulement un libpython33.a ou python33.lib ou python3.lib ou encore python3.dll,j'ai mis leurs chemin respective a chaque fois et a chaque fois ou même juste le \DLLs ou \libs,ça me dit qu'il n'arrive pas a trouver -lpython33,coll2.exe: erreur: Id a retourné 1 code d'état d’exécution a chaque fois :

                g++ aaa.c -o program -lpython3.3 -L C:\python33\libs\ -I C:\python33\include\

                g++ aaa.c -o program -lpython3.3 -L C:\python33\DLLs\ -I C:\python33\include\

                g++ aaa.c -o program -lpython3.3 -L C:\python33\libs\python3.dll -I C:\python33\include\

                g++ aaa.c -o program -lpython3.3 -L C:\python33\libs\libpython33.a -I C:\python33\include\

                g++ aaa.c -o program -lpython3.3 -L C:\python33\libs\python33.lib -I C:\python33\include\

                g++ aaa.c -o program -lpython3.3 -L C:\python33\libs\python3.lib -I C:\python33\include\


                Je suis a court de chemin la^^.

                • Partager sur Facebook
                • Partager sur Twitter
                  24 juillet 2013 à 11:21:51

                  regardes dans C:\Window\system32, tu devrait trouver le dll.

                  Et sans vouloir me répéter, on met -lpython33 (il n'y a pas de point) et on spécifie le chemin du dossier d'où se situe la dll avec -L , pas le chemin de la dll !!!!!

                  essaye cette commande :

                  g++ aaa.c -o program -lpython33 -L C:\python33\libs\ -I C:\python33\include\

                  ou 

                  g++ aaa.c -o program -lpython33 -L C:\Window\system32 -I C:\python33\include\

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 juillet 2013 à 15:41:09

                    oui,j'avais corrigé python3.3,j'ai copier les commandes que j'avais mis plus haut(ah la flemme^^),je vais essayer ca alors ,merci
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 juillet 2013 à 19:39:47

                      Re Salut,j'ai finit par trouver la dll dont tu parlais elle se trouvait dans C:\Windows\SysWOW64\ ,mais il n'y a rien a faire j'ai toujours des erreurs :

                      http://pastebin.com/sS0mk9R2

                      La encore,je ne sais pas quoi faire^^.

                      -
                      Edité par Yroz 24 juillet 2013 à 19:40:40

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 juillet 2013 à 20:22:04

                        Les warnings ne sont pas des erreurs :) . Tu te rapelle de WinMain (relis mon premier poste), et ben voila, il fait son apparition : .startup+0xa7): undefined reference to `WinMain@16'


                        refait donc les manips décrites plus haut avec --embed=WinMain comme paramètre à ton script principal, et c'est fini :) .

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 juillet 2013 à 20:38:22

                          Sur ce coup la,j'ai de l'avance,regarde la première ligne de pastebin^^

                          Edit : Pour finir j'ai tout réinstaller et la comme par magie,toute tes explications fonctionnent très bien,c'est super encore merci,sans toi j'y serais jamais arriver,bonne journée et a mon prochain problème^^.

                          -
                          Edité par Yroz 24 juillet 2013 à 20:47:51

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Cython problème de commande

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown