2012-07-28 9 views
6

Sto usando MinGW su Linux per eseguire il cross-compile su Windows. Ottenere che funzionasse era un gioco da ragazzi. Riuscire a farlo con le DLL richieste non è stato così semplice. La soluzione al momento è eseguire l'eseguibile su Windows e copiare su DLL finché non viene eseguito.Trovare le DLL richieste da un exe di Win su Linux (compilato in modo incrociato con mingw)?

C'è uno strumento per Linux che elenca le DLL richieste dal mio .exe di Windows? (Qualcosa come una combinazione di ldd e DependencyWalker.)

+0

Qualsiasi motivo per cui DependencyWalker non è abbastanza per te? Elenca tutte le DLL richieste dall'exe e quelle che non sono ancora state trovate nel percorso. – Pankaj

+0

Non è sufficiente perché DependencyWalker non è un eseguibile Linux. Ho appena scoperto che DW può essere eseguito nella console, ma devo ancora indagare se l'output è tale da poter essere collegato al processo di compilazione. In ogni caso, considero l'esecuzione di DW sotto Wine come parte del processo di compilazione per essere assolutamente l'ultima risorsa. – Magnus

risposta

9

A partire dalla fine del 2015 non ci sono utility di toolchain che supportano l'elencazione delle dipendenze dinamiche per i binari di Windows (come ldd o otool).

Dalle mie prove, un elenco delle dipendenze completa solito può essere visto con qualcosa di simile:

strings MY.EXE | grep -i '\.dll$' 

Hackish, ma ha sempre lavorato per me.

Per un esempio completo, try this script Uso nel mio ambiente cross su linux.

+3

Ho appena [creato un piccolo programma ('peldd')] (https://github.com/gsauthof/pe-util) che legge correttamente le strutture dati di un eseguibile portatile (PE) per ottenere i nomi del dipendenze dinamiche. Usa la libreria pe-parse. Il metodo 'stringhe' è una buona approssimazione del primo ordine, ma non sorprendentemente è facile ottenere falsi positivi. – maxschlepzig

+1

@ h0tw1r3, la tua pipeline è quasi corretta. Per evitare correttamente il '.' sulla riga di comando, è necessario sfuggire alla '\', altrimenti grep vedrà '.dll $' come re. – jeff6times7

Problemi correlati