C++ 无法使用交叉编译的libpng16-16.dll在w10上执行
我遇到了一个问题,我使用mxe(x86_64-w64-mingw32.shared)在linux for windows上构建并链接了一个windows应用程序,构建和链接运行良好。然后我复制粘贴所有有用的dll(这些dll都是交叉编译的,除了x64-msvcrt-ruby230.dll,它是我从官方windows安装程序获得的) 我用wine测试了我的程序,没问题,它工作起来像一个charme,我发现它与linux版本没有区别。但一旦我将所有内容放入测试VM(virtualbox中的windows10 64位)中,我就会收到错误消息: 在动态链接库D:\libpng16-16.dll中找不到过程入口点充气验证 libpng16-16.dll存在,当我(在linux中)转储它时: objdump-x libpng16-16.dll | grep充气 那么很明显,符号“imp”充气验证存在,那么我是否遗漏了什么?有人知道如何解决这个问题吗C++ 无法使用交叉编译的libpng16-16.dll在w10上执行,c++,linux,mxe,C++,Linux,Mxe,我遇到了一个问题,我使用mxe(x86_64-w64-mingw32.shared)在linux for windows上构建并链接了一个windows应用程序,构建和链接运行良好。然后我复制粘贴所有有用的dll(这些dll都是交叉编译的,除了x64-msvcrt-ruby230.dll,它是我从官方windows安装程序获得的) 我用wine测试了我的程序,没问题,它工作起来像一个charme,我发现它与linux版本没有区别。但一旦我将所有内容放入测试VM(virtualbox中的windo
提前感谢刚刚偶然发现了同样的问题。它原来是PATH环境变量中的一个限定dll文件。请尝试使用
ldd
命令找出哪些dll文件可能可疑
例如,在我的例子中,罪魁祸首是来自英特尔无线软件的zlib1.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)
...
E:\samples\sfmlSound>ldd sfmlSound.exe
ntdll.dll=>/c/WINDOWS/SYSTEM32/ntdll.dll(0x7ffee3e70000)
KERNEL32.DLL=>/c/WINDOWS/System32/KERNEL32.DLL(0x7ffee030000)
...
zlib1.dll=>/c/Program Files/Intel/WiFi/bin/zlib1.dll(0x7ffed0f10000)
...
解决冲突后,程序将正确加载。在我的例子中,我替换了libpng16-16文件,这很有效。对于mzself,这是因为官方ruby dll的某些依赖性与mxe编译的不一致。我从零开始在linux上为windows构建ruby,它可以正常工作。如何替换?我这里有一个是由mxe构建的,您在哪里寻找替代方案?我在c:\program文件中搜索了一个,在Inkscape中找到了一个。 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) ...