2012-07-28 9 views
6

Używam MinGW w systemie Linux do krzyżowej kompilacji z systemem Windows. Przygotowanie do pracy było proste. Pakowanie go z wymaganymi bibliotekami DLL nie było jednak tak proste. Rozwiązaniem w tej chwili jest uruchomienie pliku wykonywalnego w systemie Windows i kopiowanie plików DLL, aż do momentu uruchomienia.Znajdowanie bibliotek DLL wymaganych od Win exe na Linuksie (skompilowane krzyżowo z mingw)?

Czy istnieje narzędzie dla systemu Linux zawierające listę bibliotek DLL wymaganych przez mój plik .exe systemu Windows? (Coś jak połączenie ldd i DependencyWalker.)

+0

Każdy powód, dla którego DependencyWalker Ci nie wystarcza? Zawiera listę wszystkich bibliotek DLL wymaganych przez program exe, a także te, które nie zostały jeszcze znalezione na ścieżce. – Pankaj

+0

To nie wystarczy, ponieważ DependencyWalker nie jest plikiem wykonywalnym Linux. Właśnie dowiedziałem się, że DW można uruchomić w konsoli, ale wciąż muszę sprawdzić, czy dane wyjściowe są takie, że można je podłączyć do procesu kompilacji. W każdym razie uważam, że uruchamianie DW w Wine jako części procesu kompilacji jest absolutnie ostatecznym rozwiązaniem. – Magnus

Odpowiedz

9

Od końca 2015 roku nie ma narzędzi narzędziowych narzędziowych, które obsługują wyświetlanie dynamicznych zależności dla plików binarnych systemu Windows (takich jak ldd lub otool).

Z moich testów, kompletna lista zależność może być postrzegane zazwyczaj z czymś takim:

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

hackish, ale zawsze pracował dla mnie.

Dla pełnego przykładu, try this script używam w moim środowisku krzyżowym na Linuksie.

+3

Właśnie stworzyłem mały program ('peldd')] (https://github.com/gsauthof/pe-util), który poprawnie odczytuje struktury danych przenośnego pliku wykonywalnego (PE), aby uzyskać nazwy dynamiczne zależności. Używa biblioteki pe-parse. Metoda "łańcuchów" jest dobrym przybliżeniem pierwszego rzędu, ale nie jest zaskakujące, że łatwo uzyskać fałszywe pozytywne wyniki. – maxschlepzig

+1

@ h0tw1r3, Twój rurociąg jest prawie poprawny. Aby poprawnie uciec przed "." w linii poleceń musisz uciec '\', w przeciwnym razie grep zobaczy '.dll $' jako re. – jeff6times7

Powiązane problemy