2010-03-29 10 views
7

Domanda: È possibile compilare un programma su linux usando un file .dll?Possibile usare un dll su Linux

dove questo sta andando: Questa dll sarà utilizzato per scrivere un estensione PHP a qualche software proprietario da parte di terzi.

sfondo e della Ricerca:

mi è stata data una libreria chiamata proprietary.lib. Ero curioso, come non ho mai visto l'estensione .lib prima, così ho digitato:

file proprietary.lib 

L'uscita era:

proprietary.lib: current ar archive 

ho fatto qualche ricerca e ha scoperto che ar è più o meno tar (e infatti suppongo che lo abbia sostituito lo ar nella maggior parte degli ambienti * nix).

Dopo aver esaminato la manpage ar, ho visto il t option, che visualizza un elenco di tabelle dei contenuti di tale archivio. Freddo. Così ho tipo:

ar t proprietary.lib 

e ottenere:

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

UNIX non utilizza DLL. In Linux il formato file corrispondente è "così" (oggetti condivisi) e in Mac OS X è "dylib" (librerie dinamiche) e "bundle". – kennytm

+1

Vedete, è qui che entra in gioco la confusione. Dalla purga comp.lang.c, sembra che "DLL" sia un termine generico per una libreria, che per caso è il nome che Windows usa per essa. È semplice come ricompilare quella libreria nel formato ELF? –

+0

Sì, è così semplice. Sei legato al venditore di questa libreria per ottenere una build adeguata. – Broam

risposta

4

Si potrebbe provare a estrarre il file ar (i pacchetti Debian sono ar file, fwiw) ed eseguire file sui contenuti.

Non sarà possibile utilizzare le DLL di Windows senza traduzione. Gli unici file DLL che conosco che funzionano in modo nativo su Linux sono compilati con Mono.

Se qualcuno ti ha fornito una libreria binario proprietaria per il codice, dovresti verificare che sia compilata per l'architettura di destinazione (niente come provare ad usare binario ARM su un sistema x86) e che sia compilata per Linux.

Detto questo ... buona fortuna. Odio programmare contro librerie di terze parti dove ho la documentazione e la fonte.

+0

Ho provato a estrarre e rieseguire il comando file sul solo file .dll che è stato prodotto e l'output era" data ". –

+0

Se non è visto come un oggetto condiviso o una sorta di file eseguibile ... sei sfortunato. – Broam

+0

@Broam Ciao broam, è possibile compilare direttamente i file dll con Mono? O devo convertire i file DLL in codice C++ e poi compilarlo con Mono? – Lokesh

8

file DLL sono librerie di solito condivise di Windows. (È anche possibile che qualcuno su Linux abbia costruito una normale libreria Linux e lo abbia chiamato .dll per qualche ragione.)

È possibile che ci si possa collegare contro di loro usando Wine. Il supporto per questo è stato una volta lì come sperimentale - non conosco il suo stato attuale.

1

Lo sviluppo recente potrebbe aver cambiato la situazione: è disponibile una funzione loadlibrary per Linux, che consente di caricare una DLL di Windows e quindi richiamare le funzioni all'interno.

Quindi, se il file .dll in realtà è una DLL di Windows, è possibile trovare un modo per utilizzarlo nel proprio software.