Стек не может связать DLL во время выполнения, но без проблем связывает отдельную DLL - PullRequest
0 голосов
/ 20 октября 2018

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

...