无法编译导入Foreign.R的模块

时间:2016-08-09 22:43:40

标签: haskell ghc

以下是导入Foreign.R的最小模块(请注意,它甚至不使用它):

-- test.hs
{-# LANGUAGE ForeignFunctionInterface #-}

module Test where

import Foreign
import Foreign.R 

foreign export ccall testR :: Ptr (Double) -> IO ()

testR :: Ptr (Double) -> IO ()
testR result = do
  poke result $ 1

此编译失败:

ghc -fPIC -shared  -dynamic -lHSrts-ghc7.10.3 test.hs -o test.so

它给出了:

Linking test.so ...
/usr/bin/ld: test.o: réadressage R_X86_64_PC32 vers symbole « Test_testR_closure » ne peut pas être utilisé en créant un objet partagé ; recompilé avec -fPIC
/usr/bin/ld : échec de l'édition de liens finale : Mauvaise valeur
collect2: error: ld returned 1 exit status

对不起法语...在英语中应该看起来像:

Linking test.so ...
/usr/bin/ld: test.o: relocation R_X86_64_PC32 to symbol  « Test_testR_closure » cannot be used by creating a shared object; recompile with -fPIC
/usr/bin/ld : failure edit final link : Bad value
collect2: error: ld returned 1 exit status

如果删除import Foreign.R,则没有问题。

1 个答案:

答案 0 :(得分:3)

我找到了a fix here

在Ubuntu上,我做了:

sudo update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.gold" 20

我现在编译时已经没有错误了。