2016-08-09 4 views
2

est ici un module minimal importe Foreign.R (notez qu'il utilise ne même pas):ne peut pas compiler un module Foreign.R importation

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

Cette compilation échoue:

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

Il donne :

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 

Désolé pour le français ... En anglais, il devrait ressembler à:

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 

Il n'y a pas de problème si j'enlève import Foreign.R.

Répondre

3

J'ai trouvé a fix here.

Sur Ubuntu, je l'ai:

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

plus Il n'y a pas d'erreur quand je compile maintenant.