我有一个问题,我使用 mxe (x86_64-w64-mingw32.shared) 在 linux 上为 windows 构建和链接一个 windows 应用程序,构建一个链接运行良好。然后我复制粘贴所有有用的 dll(除了 x64-msvcrt-ruby230.dll,我从官方 Windows 安装程序中获得之外,所有这些都是交叉编译的)。
我用 wine 测试了我的程序,没问题它就像一个魅力,我发现与 linux 版本没有区别。但是一旦我把所有东西都放在我的测试虚拟机中(windows10 64bit inside virtualbox),我会收到错误消息:
过程入口点 inflateValidate 无法位于动态链接库 D:\libpng16-16.dll 中。
libpng16-16.dll 在那里,当我对象转储它时(在 linux 中):
objdump -x libpng16-16.dll | grep 膨胀
3a9f4 60 inflate
3aa00 66 inflateEnd
3aa10 69 inflateInit2_
3aa20 73 inflateReset
3aa30 74 inflateReset2
3aa40 80 inflateValidate
[642](sec 1)(fl 0x00)(ty 20)(scl 3) (nx 0) 0x0000000000013be0 png_inflate_claim
[654](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000014280 png_zlib_inflate
[655](sec 1)(fl 0x00)(ty 20)(scl 3) (nx 0) 0x00000000000142d0 png_inflate.constprop.6
[657](sec 1)(fl 0x00)(ty 20)(scl 3) (nx 0) 0x0000000000014680 png_inflate_read.part.3.constprop.8
[3002](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000021b08 inflateReset2
[3023](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000021b28 inflate
[3081](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000021b00 inflateValidate
[3088](sec 8)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x0000000000000578 __imp_inflateReset2
[3119](sec 8)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x0000000000000568 __imp_inflateInit2_
[3138](sec 8)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x0000000000000560 __imp_inflateEnd
[3143](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000021b10 inflateReset
[3155](sec 8)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x0000000000000558 __imp_inflate
[3162](sec 8)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x0000000000000580 __imp_inflateValidate
[3197](sec 8)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x0000000000000570 __imp_inflateReset
[3244](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000021b20 inflateEnd
[3253](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000000021b18 inflateInit2_
所以显然存在 __imp_inflateValidate 符号,所以我缺少什么吗?有人知道如何解决这个问题吗?
提前致谢