LINUX.ORG.RU

Не видит DLL в той же директории

 


0

1

Запускаю консольную программу под WINE — ругается, что не может найти MSVCR120.dll, которая лежит в той же директории. ОС — Ubuntu, версия WINE — 1.6.2.

$ wine getspec.exe
err:module:import_dll Loading library MSVCR120.dll (which is needed by L"Z:\\home\\powtest\\abserv\\zlib.dll") failed (error c000007b).
err:module:import_dll Library zlib.dll (which is needed by L"Z:\\home\\powtest\\abserv\\hdf5.dll") not found
err:module:import_dll Loading library MSVCR120.dll (which is needed by L"Z:\\home\\powtest\\abserv\\hdf5.dll") failed (error c000007b).
Exception EOSError in module getspec.exe at 000000000003E467.
System Error.  Code: 126.
Module not found.

В чём может быть дело?

Заранее спасибо.

Ответ: Возникла путаница из-за того, что на одной Убунте всё работает, на остальных — нет. Убунта, где всё работало, при внимательном рассмотрении оказалась Дебианом с Wine 1.8. В итоге пришлось ставить новый Вайн на все машины.


Ответ на: комментарий от anonymous

https://wiki.winehq.org/Wine_User's_Guide#Libraries_Settings

Там пишут:

DLLs usually get loaded in the following order:
1. The directory the program was started from.

DLL там лежит, но её не находит. Куда копать?

2. The current directory.

Она же является текущей.

3. The Windows system directory.

Пробовал класть в $WINEPREFIX/drive_c/windows/system32/ Не помогло.

olegd ()
Последнее исправление: olegd (всего исправлений: 1)

Советую сделать так.

  1. Выключи все программы, использующие Wine. Для гарантии, выполни после этого: wineserver -killall Потому что, например, 2ГИС очень любит оставить запущенным фоновый процесс 2GISTrayNotifier.exe, причём ни значка в трее, ни уведомлений о доступных обновлениях от него не слышно
  2. Переименую директорию .wine.Или, как вариант, скопируй в другое место (вдруг у тебя в /home остался всего гигабайт, или меньше?)
    // Все файлы (и директории), начинающиеся с точки, являются скрытыми (это вместо атрибута файла, как в Windows). Увидеть их можно или при помощи команды ls в командной строке, или в файловом менеджере «Вид → Показывать скрытые файлы и каталоги».
  3. Установи новый Wine. Например 3.0 или 2.0.2.
  4. Попробуй с ним. Возможно, что builtin-реализация MSVCR120.dll уже достаточно много умеет, чтобы запустить твой софт.
    // Для справки: builtin - это когда программисты Wine воссоздают библиотеку, представляющую из себя закрытый исходный код, в открытом коде. Пользуясь при этом официальной спецификацией на библиотеки (которая, как ни странно, есть. Но иногда или не полная, или есть недокументированные функции), а также инженерным анализом
  5. Если не получилось, попробуй native-библиотеку. Так же положить в ту же директорию, что и программа, или в SYSTEM32, или winetricks vcrun2013, как тебе посоветовали выше
  6. Если ничего не получилось - возвращай старый Wine, удаляй новый WINEPREFIX, и возвращай старый.
anonymous ()
Ответ на: комментарий от SR_team

В winecfg во вкладке «Библиотеки» добавь свою библиотеку в режиме «Сторонняя -> встроенная», либо просто «Сторонняя»

Как это сделать без иксов? (Про winetricks знаю.)

olegd ()
Последнее исправление: olegd (всего исправлений: 1)
Ответ на: комментарий от sanwashere

А каталог, откуда запускается файл, входит в список, обрабатываемых Wine? Если нет, то он не увидит текущего каталога.

Z: указывает на корень файловой системы — «/» . Все разрешения есть. Или я не понял вопрос?

olegd ()
Ответ на: комментарий от xDShot

Найди в интернете MSVCR120.dll

MSVCR120.dll идёт в комплекте с программой.

положи рядом с exe и в той же папке где hdf5.dll.

Уже.

winecfg, сделай MSVCR120.dll нативным.

Как это сделять без GUI?

olegd ()
Ответ на: комментарий от meliafaro

Попробуй на всякий wine64 regsvr32 your-dll-name.

$ wine64 regsvr32 MSVCP120.dll
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
err:systray:initialize_systray Could not create tray window
err:module:import_dll Loading library MSVCR120.dll (which is needed by L"C:\\windows\\system32\\MSVCP120.dll") failed (error c000007b).
Failed to load DLL MSVCP120.dll
$ wine64 regsvr32 MSVCR120.dll
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
err:systray:initialize_systray Could not create tray window
Failed to load DLL MSVCR120.dll

В чём может быть проблема?

olegd ()
Ответ на: комментарий от EXL

Иногда в Linux возникает такая же ситуация. В репозитории нет нужной версии библиотеки, поэтому приходится самому собирать или брать уже готовую.

anonymous ()