2012-07-28 10 views
6

Estoy usando MinGW en Linux para realizar una compilación cruzada a Windows. Hacer que funcione fue muy fácil. Sin embargo, empacarlo con los archivos DLL necesarios no fue tan simple. La solución en este momento es ejecutar el ejecutable en Windows y copiar sobre las DLL hasta que realmente se ejecute.Búsqueda de archivos DLL necesarios para un Win.exe en Linux (compilación cruzada con mingw)?

¿Existe alguna herramienta para Linux que enumere las DLL requeridas por mi Windows .exe? (Algo así como una combinación de ldd y DependencyWalker.)

+0

¿Alguna razón por la cual DependencyWalker no es suficiente para usted? No enumera todos los dlls requeridos por el exe, así como los que aún no se encuentran en la ruta. – Pankaj

+0

No es suficiente porque DependencyWalker no es un ejecutable de Linux. Acabo de descubrir que DW se puede ejecutar en la consola, pero aún tengo que investigar si el resultado es tal que pueda engancharse en el proceso de compilación. En cualquier caso, considero que ejecutar DW en Wine como parte del proceso de compilación es el último recurso. – Magnus

Respuesta

9

A partir de finales de 2015 no hay utilidades de herramientas que admitan listados de dependencias dinámicas para binarios de Windows (como ldd o otool).

De mis pruebas, una lista completa de dependencia por lo general se puede ver con algo como:

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

hacker, pero siempre ha trabajado para mí.

Para un ejemplo completo, utilizo try this script en mi entorno cruzado en Linux.

+3

Acabo de [crear un pequeño programa ('peldd')] (https://github.com/gsauthof/pe-util) que lea correctamente las estructuras de datos de un ejecutable portátil (PE) para obtener los nombres de dependencias dinámicas Utiliza la biblioteca pe-parse. El método 'strings' es una buena aproximación de primer orden, pero no es sorprendente que sea fácil obtener falsos positivos. – maxschlepzig

+1

@ h0tw1r3, su canalización es casi correcta. Para escapar correctamente del '.' en la línea de comando, necesitas escapar de '\', de lo contrario, grep verá '.dll $' como re. – jeff6times7

Cuestiones relacionadas