我在OSX 10.9.3上使用GHC 7.8.2和Cabal 1.20.0.2构建我的Haskell库时遇到问题,同时启用了-staticlib
和-threaded
。
我正在构建的库使用FFI导出几个函数,以便在Xcode项目中从ObjectiveC调用。这只适用于-staticlib
启用,但现在我意识到我需要同时从多个OS线程调用我的Haskell库。但是当我向ghc-options添加-threaded
时,我在链接时遇到错误:
error: libtool: can't locate file for: -lpthread
error: libtool: file: -lpthread is not an object file (not allowed in a library)
完成输出:
$ cabal build
Resolving dependencies...
Configuring dpsync-0.1.0.0...
Building dpsync-0.1.0.0...
Preprocessing library dpsync-0.1.0.0...
[ 1 of 11] Compiling Link ( src/Link.hs, dist/build/Link.o )
...
[11 of 11] Compiling HsCocoa ( src/HsCocoa.hs, dist/build/HsCocoa.o )
Linking liba.a ...
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -lpthread
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lpthread is not an object file (not allowed in a library)
失败的链接器命令看起来像这样(...替换了一堆-l和-L选项):
libtool -static -o liba.a dist/build/HsCocoa.o ... -lCffi -lpthread
有谁知道可能出现什么问题?
修改
在Haskell Cafe上讨论了这个之后,有人认为这可能是GHC中的一个错误。我在这里创建了一张票:https://ghc.haskell.org/trac/ghc/ticket/9189