以下是导入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
,则没有问题。
答案 0 :(得分:3)
我找到了a fix here。
在Ubuntu上,我做了:
sudo update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.gold" 20
我现在编译时已经没有错误了。