Ich behalte eine Cython-Bindung an etwas OCaml-Code (über ihre jeweilige C-Schnittstelle). Für frühere Versionen habe ich es geschafft, eine Wheel-Datei für Windows durch Cross-Compilation zu betrügen und zu verteilen. Jetzt habe ich es endlich geschafft, die Bibliothek für Windows 64 Bit sauber und nativ zu erstellen.Wie ändere ich den Verknüpfungsbefehl in einem SetupTools-Buildprozess (msvc)?
Für die 32-Bit kompilierte Version hatte ich ein spezifisches Ziel in meinem setup.py
mit den richtigen Befehlen auszuführen. Zurück auf Windows, würde Ich mag zu einer setuptoolsic Weise haften zu tun, aber die Sache ist, ich brauche den regelmäßige Verknüpfung Befehl link.exe
mit einem anderen Werkzeug zu ersetzen (resp. flexlink.exe
, ausgeliefert mit OCaml auf Windows)
Keine Panik: flexlink.exe
baut nur einige Assembler Scheiße vor dem Kompilieren und Verknüpfen mit dem regulären link.exe
. Es ist der richtige Weg, OCaml-Executables und Shared Libraries unter Windows zu verknüpfen.
Für MacOS und Linux, das traditionelle arbeitet Extension
Muster wie ein Zauber wie folgt (mlobject
von OCaml etwas früher erzeugt wird nach einigen Zeitstempel überprüft in der Datei, asmrunlib
auf das Äquivalent von python36.dll
für OCaml der vollständige Pfad ist):
extensions = [
Extension("foo",
["foo.pyx", "interface_c.c"],
language="c",
include_dirs=INCLUDE,
extra_compile_args=compileargs,
extra_link_args=[mlobject, asmrunlib, ]
)
]
sagen wir, ich beschränke mich auf Python> = 3.5, ich denke, (im Vergleich zu großen Projekten wie NumPy) ich würde durch die Erweiterung distutils._msvccompiler.MSVCCompiler
beginnen müssen, und die self.linker = _find_exe("link.exe", paths)
mit etwas auf flexlink.exe
Basis zu ersetzen.
Das Problem ist, dass ich keine Ahnung habe, wie sie die Klempnerarbeit, die als nächstes kommt, verwalten (diesen erweiterten Compiler verbinden und ihn wie die normale msvc zum Setup-Prozess aussehen lassen). Ich nehme an, dass es nirgendwo gründlich dokumentiert ist und dass, wenn sie mehr als das in NumPy machen könnten, ich irgendwie mein Ziel erreichen könnte.
Meine setup.py
ist immer noch einigermaßen einfach und eine Lösung, die den gesamten Gebäude/Verpackungsprozess in einer einzigen Datei hält, wäre großartig!
Gerade falls Sie nicht bekommen, hier zu beantworten, versuchen auch die Setuptools-Mailingliste: https://mail.python.org/pipermail/distutils-sig/ –
Diese Antwort wurde etwas verwandt gefunden, erwähnt MSVC distutils Compiler: http://stackoverflow.com/questions/36212494/get-the-commands-distutils-passe-to-the-compiler/36710903#36710903 –
Die Frage ist auch auf der Mailing-Liste verfügbar: https://mail.python.org/pipermail/distutils-sig/2017-March/030211.html – xoolive