У меня проблема, я создаю и связываю приложение для Windows на Linux для Windows, используя mxe (x86_64-w64-mingw32.shared), сборка ссылок работает хорошо. Затем я копирую и вставляю все полезные dll (все они кросс-скомпилированы, кроме x64-msvcrt-ruby230.dll, который я получаю от официального установщика Windows).
Я протестировал свою программу с вином, без проблем она работает как шарм, и я не вижу разницы с версией для Linux. Но как только я помещаю все в свою тестовую виртуальную машину (windows10 64bit внутри virtualbox), я получаю сообщение об ошибке:
Не удалось найти точку входа в процедуру inflateValidate в библиотеке динамических ссылок D: \ libpng16-16.dll.
libpng16-16.dll есть, и когда я возражаю против него (в 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, так что, я что-то упускаю? И кто-нибудь знает, как это исправить?
заранее спасибо
Просто наткнулся на ту же проблему. Это оказался конфликтующий dll-файл в переменной PATH. попробуйте ldd
Команда, чтобы узнать, какие файлы DLL могут быть подозрительными.
например, в моем случае виновником является zlib1.dll от программного обеспечения Intel для беспроводных сетей.
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) ...
после разрешения конфликтов программа будет загружена правильно.
Других решений пока нет …