Невозможно выполнить на w10 с кросс-скомпилированной libpng16-16.dll

У меня проблема, я создаю и связываю приложение для 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, так что, я что-то упускаю? И кто-нибудь знает, как это исправить?

заранее спасибо

2

Решение

Просто наткнулся на ту же проблему. Это оказался конфликтующий 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)
...

после разрешения конфликтов программа будет загружена правильно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]