我已经创建了一个Haskell包,它使FFI调用CUDA代码中定义的函数 . 我想在包构建期间将.cu文件编译为对象(.o)文件,并强制链接器将其链接到 .
到目前为止,我试图使用一种技术this question . 我已经定制buildHook到:
-
运行nvcc
-
运行默认buildHook
-
使用nvcc编译代码创建ar库文件 .
Setup.hs可用here .
该解决方案在将该包限制为静态链接方面具有主要缺点 . 尽管cabal生成了一个共享库,但它无法工作,因为它无法解析位于目标文件中的符号 .
在构建期间是否有更简单的方法来链接自定义代码?
1 回答
我做了类似的事情 . 我有一个调用CUDA代码的Haskell文件 .
以下是我编译CUDA库并与Haskell链接的方法:
然后,我将所有内容链接到一个名为
LibSO
的C共享库,其中包含Haskell选项哪里
然后我将我的Haskell文件编译成o和hi文件 . (因为TemplateHaskell我编译了两次)
所以现在我们有了haskell动态对象和一个C共享库 . 最后,我将主要的haskell文件与所有内容相关联:
这种帮助吗?