无法在OSX上使用选项-staticlib和-threaded构建Haskell项目

时间:2014-06-07 10:29:46

标签: multithreading macos haskell ghc ffi

我在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

有谁知道可能出现什么问题?

Entire project on GitHub

修改

在Haskell Cafe上讨论了这个之后,有人认为这可能是GHC中的一个错误。我在这里创建了一张票:https://ghc.haskell.org/trac/ghc/ticket/9189

0 个答案:

没有答案