我有一个问题,我使用mxe(x86_64-w64-mingw32.shared)在Linux上构建并链接windows应用程序,构建链接工作正常。然后我复制粘贴所有有用的dll(这些都是交叉编译的,除了x64-msvcrt-ruby230.dll,我从官方的Windows安装程序获得)。
我用葡萄酒测试了我的程序,没问题就像魅力一样,我发现没有与linux版本有任何区别。但是,一旦我将所有内容放入我的测试虚拟机(虚拟机内的Windows10 64位),我收到错误消息:
无法在动态链接库D:\ libpng16-16.dll中找到过程入口点inflateValidate。
libpng16-16.dll就在那里,当我在objectdump它时(在linux中):
objdump -x libpng16-16.dll | grep inflate
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存在,所以我有什么遗漏?有人知道如何解决这个问题吗?
提前致谢
答案 0 :(得分:1)
偶然发现了同样的问题。事实证明,它是PATH环境变量中的一个confilicting dll文件。尝试使用ldd
命令找出哪些dll文件可能存在疑问。
E:\samples\sfmlSound>ldd sfmlSound.exe ntdll.dll => /c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffee3e70000) KERNEL32.DLL => /c/WINDOWS/System32/KERNEL32.DLL (0x7ffee3030000) ... zlib1.dll => /c/Program Files/Intel/WiFi/bin/zlib1.dll (0x7ffed0f10000) ...
解决冲突后,程序将正确加载。
答案 1 :(得分:0)
在我的情况下,我替换了 libpng16-16 文件并且有效。