2012-01-24 3 views
2

Je rencontre des problèmes vraiment bizarres avec les ctypes. J'utilise ctypes pour s'interfacer avec une bibliothèque C++ qui a une interface C. La bibliothèque a beaucoup de fonctionnalités parallèles. Plus souvent qu'autrement, les appels parallèles ont tendance à se terminer avec une segfault à partir de la couche C++, mais je les ai également rencontrés avec du code série. Je me demande s'il n'y a aucune restriction sur si l'interpréteur Python et le code C++ doivent être compilés avec la même version du compilateur C++? Si oui, comment puis-je savoir ce que C++ a été utilisé pour construire Python? J'ai essayé d'exécuter des chaînes sur Python et grep pour gcc et g ++, rien ne se montre.ctypes - est-ce que python doit être compilé avec la même version que la bibliothèque C?

+1

Je n'ai jamais eu un problème similaire. Pour savoir comment trouver le compilateur utilisé pour compiler Python, regardez dans ['sys.version'] (http://docs.python.org/library/sys.html#sys.version), appelez [' platform.python_compiler () '] (http://docs.python.org/library/platform.html#platform.python_compiler) ou simplement lancer' python'. –

Répondre

4

Il n'est pas du tout nécessaire que la bibliothèque native que vous appelez avec ctypes doit être construite avec un runtime correspondant. En fait, il n'est même pas nécessaire que la bibliothèque native utilise même une exécution C.

Par exemple, vous pouvez utiliser ctypes pour appeler du code écrit dans d'autres langues, par ex. Delphes. Ou vous pouvez utiliser ctypes pour appeler les fonctions de l'API Windows qui ne sont pas liées à MSVC.

Je suppose que vous devrez chercher ailleurs pour résoudre votre problème!

+0

OK, je suppose que je vais devoir te faire confiance à ce sujet. Merci! – rokuingh

+0

Vous pouvez le tester vous-même assez facilement en construisant une DLL avec, disons, mingw, qui se connecte à un environnement d'exécution assez différent. –

0

CPython ne contient pas de code C++ et donc il n'y a aucune exigence en ce qui concerne le compilateur C++ utilisé pour compiler une bibliothèque C++ chargée dans un processus CPython. Cependant, la couche C et la bibliothèque C++ doivent généralement être compilées avec le même compilateur C++. Et si la bibliothèque C++ ou la couche C se lient à libpython, elles doivent être compilées avec la même version de CPython qui sera utilisée plus tard pour exécuter le code ctypes qui charge la bibliothèque.

Questions connexes