我有一个项目,要求使用两个DLL来与hardware接口。第一个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名称放在了额外库部分:
# from package.yaml
executables:
my-project-exe:
extra-libraries:
- foo
- bar
该项目编译正常,当我仅使用foo.dll中的函数运行main时,它的工作原理与预期的完全一样,但是,当我尝试使用bar.dll中的函数时,该程序将暂停,而不会出现任何错误消息。即使在我对bar.dll函数进行任何调用之前放置的打印语句也不会被打印。 我尝试将bar移到foo的目录中,但没有成功。但是,如果我将bar.dll移到程序的根目录,则它链接得很好,并且能够访问bar.dll中的功能。另外,当我运行ghci并明确告诉它要链接的DLL时,我也可以从bar访问函数:
stack ghci --ghci-options -lfoo --ghci-options -lbar
# Now I can use the bar.dll and foo.dll functions
所以我或多或少地得出以下结论:这些错误是由于堆栈在运行时无法找到bar.dll而引起的。但这对我来说没有意义,因为foo可以正常工作,并且我使用bar进行了完全相同的设置。
我不知道为什么会发生这种情况,并且不愿意任何解释。由于只要将有问题的DLL移至项目的根目录就可以使此工作正常进行,因此修复此问题并非至关重要,但我仍然想知道发生了什么以及为什么它拒绝链接>