Я искал в Интернете об этом. Все, что я могу найти, говорит о том, что Windows mklink ведет себя как Unix ln -s (пример на этом сайте).

Тем не менее, я хочу настроить JDK, чтобы получить доступ к нему как к javac и java из любого места. Я решил добавить только эти два в отдельной папке в переменную среды Path вместо всей папки bin потому что там есть много других вещей (не связанных: имеет ли это значение?).

В прошлом я делал это успешно в окне Debian с помощью ln -s , так что, по-видимому, с mklink все должно работать нормально, но вместо этого я получаю сообщение об ошибке «Не могу найти DLL», как будто я просто сделал копию из исполняемых файлов.

Итак, вопрос: почему эти две команды ведут себя по-разному? (хотя они сказали, что нет)

1 ответ1

1

Скорее всего, исполняемый файл запускается из символической ссылки с тем, что его текущим каталогом является тот, где находится символическая ссылка, а не тот, где находится исполняемый файл, поэтому библиотеки DLL в каталоге исполняемого файла не найдены.

Я согласен с тем, что в соответствии с определением алгоритма поиска, данным Microsoft, библиотеки DLL должны были быть найдены. Это, скорее всего, недостаток в алгоритме поиска DLL в Windows, и вы ничего не можете с этим поделать.

Обходной путь может заключаться в использовании другого механизма, чем символическая ссылка, сохраняя в папке Path файл .bat вместо символической ссылки. Файл будет выглядеть примерно так:

cd \path\to\exe-folder
exe-file

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .