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?
Répondre
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!
OK, je suppose que je vais devoir te faire confiance à ce sujet. Merci! – rokuingh
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. –
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.
- 1. Que doit être installé pour que WMPLib fonctionne avec C#?
- 2. Est-ce que ce drl doit être compilé?
- 3. Est-ce que deux versions de la même bibliothèque peuvent coexister dans la même installation Python?
- 4. Utilisation de la bibliothèque hdf5 en Python avec ctypes
- 5. Netbeans - Doit être compilé badge
- 6. Erreur: L'esthétique doit être soit la longueur 1 ou la même que les données (4)
- 7. Est-ce que Quickbooks doit être installé sur la même machine que le SDK
- 8. ctypes Python, la destruction d'objets de C
- 9. L'indexeur statique C# ne doit pas être compilé, mais
- 10. Macro `container_of` en C++ avec la même signature que C
- 11. ctypes python pur vs ctypes django
- 12. Comment puis-je spécifier que la bibliothèque X doit être liée statiquement?
- 13. La bibliothèque boost.signals2 doit-elle être construite?
- 14. Ctypes Python: encapsulation de la classe C++ avec les opérateurs
- 15. Boost - shared_mutex doit être la même instance?
- 16. Erreur 'compilé avec une version différente` lors de la compilation de la bibliothèque
- 17. Que doit être publié dans AppDelegate?
- 18. Test d'une bibliothèque C++ avec Python
- 19. Est-ce que MyApp.vshost.exe doit être distribué avec MyApp.exe?
- 20. Ecriture d'une bibliothèque qui doit être orientée objet. Objective-C ou C++ pour la plus grande compatibilité avec C?
- 21. pour vérifier que la chaîne ne doit pas être vide
- 22. La div enfant doit être aussi élevée que div div
- 23. Comment pointer textmate vers la même version de python que j'obtiens à la ligne de commande
- 24. Comment changer la version lib d'un binaire déjà compilé
- 25. Rendre div externe doit être automatiquement la même hauteur que son contenu flottant
- 26. ctypes vs extension C
- 27. Projet toujours à la recherche d'une nouvelle version de la bibliothèque, alors que j'utilise l'ancienne version
- 28. Est-ce que Ctypes Structures et POINTERS libèrent automatiquement la mémoire lorsque l'objet Python est supprimé?
- 29. Est-ce qu'OpenCV doit être compilé avant de l'utiliser?
- 30. Un type doit-il être uniquement déplacé, simplement parce que la copie peut être coûteuse?
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'. –