У меня есть проект, который требует использования двух DLL для взаимодействия с оборудованием.Первый, foo.dll, предоставляется поставщиком оборудования, и он находится в src / path / to / foo / dir, а второй - тот, который я создал, и находится в src / path / to / bar / dir.,Я добавил правильные пути к соответствующим заголовочным файлам и расположениям DLL в мой файл stack.yaml:
# from stack.yaml
extra-include-dirs:
- src/path/to/foo/headers
- src/path/to/bar/headers
extra-lib-dirs:
- src/path/to/foo/dir
- src/path/to/bar/dir
, и в моем package.yaml я поместил имена DLL в раздел extra-library:
# from package.yaml
executables:
my-project-exe:
extra-libraries:
- foo
- bar
Проект компилируется просто отлично, и когда я запускаю main с функциями только из foo.dll, он работает точно так же, как и ожидалось, однако, когда я пытаюсь использовать функции из bar.dll, программа останавливается безлюбое сообщение об ошибке.Даже операторы print, которые я помещаю перед вызовами функций bar.dll, не будут напечатаны.Я попытался переместить панель в каталог foo, но она не сработала.Тем не менее, если я переместить bar.dll в корневой каталог программы, он просто отлично связывается и может получить доступ к функциям bar.dll.Кроме того, когда я запускаю ghci и явно сообщаю ему DLL для связи, я также могу получить доступ к функциям из бара:
stack ghci --ghci-options -lfoo --ghci-options -lbar
# Now I can use the bar.dll and foo.dll functions
Так что я более или менее пришел к выводу, что эти ошибки связаны со стекомбудучи не в состоянии найти bar.dll во время выполнения.Но это не имеет смысла для меня, потому что foo работает просто отлично, и я сделал точно такую же настройку с bar.
Я понятия не имею, почему это происходит, и я хотел бы получить любое объяснение.Так как я могу заставить это работать, если я просто перенесу проблемную DLL в корневую директорию проектов, это не супер критично, что я это исправлю., Но я все еще хотел бы знать, что происходит и почему он отказывается связывать