我在Linux上使用MinGW交叉编译到Windows。让工作变得轻而易举。用所需的DLL打包它并不是那么简单。目前的解决方案是在Windows上运行可执行文件并复制DLL直到它实际运行。
是否有适用于Linux的工具列出了我的Windows .exe所需的DLL? (类似于ldd
和DependencyWalker的组合。)
答案 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