2010-03-29 19 views
7

Frage: Ist es möglich, ein Programm unter Linux mit einer DLL-Datei zu kompilieren?Möglich, eine .dll unter Linux zu verwenden

Wo dies wird: Diese DLL wird eine PHP-Erweiterung zu einem gewissen proprietären Software von einem Dritten schreiben verwendet werden.

Hintergrund und Forschung:

Ich habe proprietary.lib eine Bibliothek mit dem Namen gegeben. Ich war neugierig, wie ich sie noch nie die .lib Erweiterung gesehen haben, so dass ich getippt:

file proprietary.lib 

Der Ausgang war:

proprietary.lib: current ar archive 

ich tat etwas Forschung und fand, dass ar ist mehr oder weniger tar (und in der Tat, ich denke tar hat seit ar in den meisten * nix Umgebungen ersetzt).

Als ich die Manpage ar inspizierte, sah ich die t option, die eine Tabelle mit den Inhalten dieses Archivs anzeigt. Cool. So Typ I:

ar t proprietary.lib 

Und erhalten:

proprietary.dll 
proprietary.dll 
... (snip X lines) ... 
+2

UNIX verwendet keine DLLs. In Linux ist das entsprechende Dateiformat "so" (shared objects) und in Mac OS X ist es "dylib" (dynamische Bibliotheken) und "bundle". – kennytm

+1

Sie sehen, das ist, wo die Verwirrung hereinkommt. Von scouring comp.lang.c, scheint es, dass "DLL" ist ein allgemeiner Begriff für eine Bibliothek, die gerade so der Name ist, den Windows dafür verwendet. Ist es so einfach, diese Bibliothek in das ELF-Format neu zu kompilieren? –

+0

Ja, es ist so einfach. Sie sind dem Verkäufer dieser Bibliothek verpflichtet, um Ihnen einen korrekten Build zu beschaffen. – Broam

Antwort

4

Sie könnten versuchen, die ar Datei zu extrahieren (Debian-Pakete sind ar Dateien, fwiw) und file auf den Inhalt ausführen.

Sie werden Windows DLLs nicht ohne Übersetzung verwenden können. Die einzigen DLL-Dateien, von denen ich weiß, dass sie nativ unter Linux funktionieren, sind mit Mono kompiliert.

Wenn Ihnen jemand eine proprietäre Binärbibliothek zum Codieren gab, sollten Sie überprüfen, ob sie für die Zielarchitektur kompiliert wurde (nichts wie der Versuch, eine ARM-Binärdatei auf einem x86-System zu verwenden) und dass sie für Linux kompiliert wurde.

Das sagte ... viel Glück. Ich hasse Programmierung gegen Bibliotheken von Drittanbietern, wo ich die Dokumentation und die Quelle habe.

+0

Versucht, den Dateibefehl in der einzigen .dll-Datei, die erzeugt wurde und die Ausgabe" data "war, zu extrahieren und erneut auszuführen. –

+0

Wenn es nicht als gemeinsames Objekt oder ausführbare Datei angezeigt wird, haben Sie kein Glück. – Broam

+0

@Broam Hallo broam, ist es möglich, DLL-Dateien direkt mit Mono zu kompilieren? Oder muss ich die DLL-Dateien in C++ - Code konvertieren und dann mit Mono kompilieren? – Lokesh

8

DLL-Dateien sind in der Regel Windows-shared libraries. (Es ist auch möglich, dass jemand unter Linux eine reguläre Linux-Bibliothek erstellt hat und sie aus irgendeinem Grund als .dll bezeichnet hat.)

Es ist möglich, dass Sie über Wine eine Verknüpfung mit ihnen herstellen können. Die Unterstützung dafür war einmal experimentell - ich weiß nicht, wie es ist.

1

Die jüngste Entwicklung könnte die Situation verändert haben: Es gibt eine loadlibrary-Funktion für Linux, die es ermöglicht, eine Windows DLL zu laden und dann Funktionen aufzurufen.

Also, wenn die .dll Datei, die Sie tatsächlich haben, eine Windows DLL ist, können Sie einen Weg finden, es in Ihrer Software zu verwenden.

Verwandte Themen