在Linux上查找Win exe所需的DLL(与mingw交叉编译)?

时间:2012-07-28 17:03:56

标签: linux dependencies mingw cross-compiling

我在Linux上使用MinGW交叉编译到Windows。让工作变得轻而易举。用所需的DLL打包它并不是那么简单。目前的解决方案是在Windows上运行可执行文件并复制DLL直到它实际运行。

是否有适用于Linux的工具列出了我的Windows .exe所需的DLL? (类似于ldd和DependencyWalker的组合。)

4 个答案:

答案 0 :(得分:11)

截至2015年末,没有工具链实用程序支持列出Windows二进制文件的动态依赖关系(例如ldd或otool)。

从我的测试中,通常可以看到完整的依赖列表,例如:

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

Hackish,但它一直对我有用。

作为一个完整的例子,我在linux上的交叉环境中使用了try this script

答案 1 :(得分:1)

$ objdump -p program.exe | grep "DLL Name:"
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll

FWIW 可以将 objdump-p(或 -x)选项一起使用。 这比筛选“.dll”字符串要好得多,因为它很可能会产生很多误报。

答案 2 :(得分:0)

    #!/bin/sh

    notfounddlls='KERNEL32.dll'
    dllbase=/usr/x86_64-w64-mingw32

    nc=1
    while [ $nc -gt 0 ];
    do
       nc=0
       for f in *.exe *.dll
       do
          for dep in $(strings $f | grep -i '\.dll$')
          do
             if [ ! -e $dep ]; then
                echo $notfounddlls | grep -iw $dep > /dev/null
                if [ $? -ne 0 ]; then
                   dllloc=$(find $dllbase -iname $dep)
                   if [ ! -z $dllloc ]; then
                      cp $dllloc .
                      echo "Copying "$(basename $dllloc)
              nc=$(($nc + 1))
           else
              notfounddlls="$notfounddlls $dep"
           fi
        fi
             fi
          done
       done
    done
    echo "System DLLS: "$notfounddlls

答案 3 :(得分:0)

检查您的实用程序是否支持objdump --help的PE格式。如果没有,请为MinGW安装交叉编译器工具集(例如https://packages.debian.org/sid/mingw-w64)。

比看:

objdump --private-headers $EXE