В Windows моя библиотека x64 (foo.dll) имеет загруженную с задержкой зависимость от другой библиотеки x64 (foreignlibrary.dll), имя которой совпадает с именем 32-библиотеки (foreignlibrary.dll). Конечно, они находятся в разных каталогах. Обычно числа используются как msvcr110.dll или msvcr120.dll, но в данном случае это не так.
Моя библиотека не может быть загружена, потому что (по крайней мере, это то, что говорит мне обходчик зависимостей), потому что она загрузила 32-разрядную версию Foreignlibrary.dll.
Кажется, это первое, что он нашел с этим именем. Как я могу убедиться, что загружена правильная библиотека x64.
Ответ 1 · Ben
Прежде чем запускать приложение, которое загружает foo.dll, настройте среду, чтобы добавить местоположение 64-разрядной внешней библиотеки.dll в начало переменной PATH. Когда вашему приложению необходимо загрузить иностранную библиотеку.dll, оно найдет ее в указанном вами местоположении до того, как найдет ее в 32-разрядном каталоге.
Вы можете изменить системные пути самостоятельно или (что я предпочитаю) создать файл .bat, который устанавливает PATH, а затем запускает исполняемый файл.
Предполагая, что ваш .bat находится в том же месте, что и ваш exe, а ваша библиотека находится в libs64:
@echo off
PATH=libs64;%PATH%
prog.exe
Ответ 3 · SamB
Это предупреждение от обходчика зависимостей не обязательно является поводом для беспокойства; Windows, в отличие от обходчика зависимостей, будет игнорировать DLL-файлы неправильной архитектуры и продолжит поиск одной из правильных архитектур. Если в пути поиска нет такого файла, это означает, что у вас возникла проблема.
И на самом деле, для библиотек с задержкой даже это не обязательно проблема: часто они загружаются с задержкой именно потому, что они необязательны.