Haskell ghc visual studio DLL的怪异行为
Haskell ghc visual studio DLL weird behaviour
我正试图在windows上从GHC(7.8.3版)调用visual studio(2015社区版)构建的C DLL。
C代码:(myDLL.cpp)
extern "C" {
__declspec(dllexport) int someFn() {
return 42;
}
}
Haskell代码:(Main.hs)
module Main where
import Foreign.Ptr
import Foreign.C.Types
import Data.Int
foreign import ccall unsafe "someFn" c_someFn :: CInt
mySomeFn = c_someFn
main :: IO ()
main = do let z = mySomeFn
print z
将生成的x64.dll、.lib和.hs文件复制到同一文件夹并运行之后
ghci -L. -lmyDLL Main.hs
...
>main
它按预期打印'42'。
运行
ghc -L. -lmyDLL Main.hs
编译和链接很好,但在执行main.exe之后,不会打印任何输出。甚至没有错误消息。为什么会发生这种情况?
编辑:以下是我修复它的方法。安装最新的Haskell平台,然后下载并复制binutils的最新副本到Haskell的mingw文件夹。(对我来说,D:\Program Files\Haskell Platform\7.10.2-a\mingw)。接下来,它开始抱怨zlib1.dll,所以我也从MSYS2下载了它,并将它粘贴到了mingw\bin文件夹中。在那之后,它起了作用。
似乎与此问题类似。基本上,ghc-7.8
发行版包含有缺陷的binutils,它们不能正确处理VisualStudio.lib文件。解决方法是升级mingw
分发版或重新生成.lib文件。详细信息请参见票证(以及#10726)。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- Haskell ghc visual studio DLL的怪异行为