2010-02-25 2 views
0

J'utilise distutils pour compiler un module d'extension pour Python, mais plutôt que d'utiliser l'API Python C j'utilise ctypes pour parler à la bibliothèque partagée qui en résulte.Distutils peut-il utiliser un .def personnalisé pour exposer des symboles supplémentaires lorsqu'il compile un fichier .dll Windows?

Cela fonctionne très bien sous Linux car il exporte automatiquement tous les symboles dans une bibliothèque partagée, mais dans Windows distutils fournit un .def pour exporter uniquement la fonction init du module Python.

Comment puis-je étendre distutils pour fournir mon propre .def sous Windows afin qu'il exporte les symboles dont j'ai besoin?

Répondre

1

Vous pouvez transmettre ['-Wl, - export-all-symbols'] comme extra_link_args si vous utilisez GCC de Mingw. Il existe probablement un paramètre similaire pour Visual, quelque part dans l'EDI.

Cela ne fonctionne que si distutils choisit d'utiliser "gcc -mdll" comme éditeur de liens au lieu de "dllwrap". Il le fait si votre version de ld est postérieure à 2.10.90, ce qui devrait être le cas si vous utilisez un Mingw récent. Au début cela ne fonctionnait pas pour moi car j'utilisais Python 2.2 qui a un petit bug lié à l'analyse de version: il attend 3 nombres séparés par des points donc ça revient à dllwrap si la version ld est 2.20 ...

+0

I Suis-je conscient de cette option, mais cela fonctionnera-t-il en présence d'un fichier .def fourni par distutils? – joeforker

+0

Non, le __declspec ne fonctionne pas non plus. C'est très étrange, ici au travail, nous avons .pyd construit à travers des distutils qui exportent tous leurs symboles. Je vais creuser un peu ... – fraca7

Questions connexes