2010-03-29 20 views
7

Question: Est-il possible de compiler un programme sur Linux en utilisant un fichier .dll?Possible d'utiliser un fichier .dll sous Linux

Où cela va: Ce .dll sera utilisé pour écrire une extension PHP à un logiciel propriétaire d'un tiers.

Contexte et recherche:

m'a été donné une bibliothèque appelée proprietary.lib. J'étais curieux, comme je l'ai jamais vu l'extension .lib avant, donc je tapais:

file proprietary.lib 

La sortie était:

proprietary.lib: current ar archive 

Je l'ai fait quelques recherches et trouvé que ar est plus ou moins tar (et en fait, je suppose que tar a depuis remplacé ar dans la plupart des environnements * nix). Lors de l'examen de la page de manuel ar, j'ai vu le t option, qui affiche une liste de table du contenu de cette archive. Cool. Donc, je tape:

ar t proprietary.lib 

et obtenez:

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

UNIX n'utilise pas les DLL. Sous Linux, le format de fichier correspondant est "so" (objets partagés) et dans Mac OS X c'est "dylib" (bibliothèques dynamiques) et "bundle". – kennytm

+1

Vous voyez, c'est là que la confusion entre en jeu. À partir de récurer comp.lang.c, il semble que "DLL" est un terme générique pour une bibliothèque, qui vient d'être le nom que Windows utilise pour cela. Est-ce aussi simple que de recompiler cette bibliothèque dans le format ELF? –

+0

Oui, c'est aussi simple que ça. Vous êtes redevable au vendeur de cette bibliothèque pour vous obtenir une bonne construction. – Broam

Répondre

4

Vous pouvez essayer d'extraire le fichier ar (les paquets Debian sont des fichiers ar, fwiw) et d'exécuter file sur le contenu.

Vous ne pourrez pas utiliser les DLL Windows sans traduction. Les seuls fichiers DLL que je connaisse qui fonctionnent nativement sous Linux sont compilés avec Mono. Si quelqu'un vous a donné une bibliothèque binaire propriétaire contre laquelle vous devez effectuer un code, vérifiez qu'il est compilé pour l'architecture cible (rien de tel que d'essayer d'utiliser un binaire ARM sur un système x86) et qu'il est compilé pour Linux.

Cela étant dit ... bonne chance. Je déteste la programmation contre les bibliothèques tierces où j'ai la documentation et la source.

+0

Essayé d'extraire et de ré-exécuter la commande de fichier sur le seul fichier .dll qui a été produit et la sortie était" données ". –

+0

Si ce n'est pas considéré comme un objet partagé ou une sorte de fichier exécutable ... vous n'avez pas de chance. – Broam

+0

@Broam Bonjour Broam, est-il possible de compiler directement des fichiers DLL avec Mono? Ou ai-je besoin de convertir les fichiers DLL en code C++ et ensuite le compiler avec Mono? – Lokesh

8

fichiers .dll sont généralement des bibliothèques partagées de Windows. (Il est également possible que quelqu'un sous Linux ait construit une bibliothèque Linux régulière et l'ait appelée .dll pour une raison quelconque.)

Il est possible que vous puissiez vous lier à eux en utilisant Wine. Le soutien pour cela était une fois expérimental - je ne connais pas son statut actuel.

1

Un développement récent a peut-être changé la situation: il existe une fonction loadlibrary pour Linux, qui permet de charger une DLL Windows et d'y appeler des fonctions. Donc, si le fichier .dll est en fait une DLL Windows, vous pouvez trouver un moyen de l'utiliser dans votre logiciel.