2017-05-19 1 views
0

J'ai des problèmes pour lier plusieurs modules/sous-programmes Fortran dans une bibliothèque partagée. Le truc, c'est que j'ai d'abord eu un programme Fortran autonome, avec tout ça s'est bien passé. Cela consistaitObjets partagés liant Fortran à partir de plusieurs fichiers sources dans une seule bibliothèque

main.f95 
mymodule.f95 
myutils.f95 

Mais maintenant, j'adaptait les choses pour que je puisse appeler le code Fortran de R.

Alors, je jeter le principal main.f95 du programme et j'ai un nouveau fichier, disons

callFromR.f95 

qui contient un sous-programme qui sera appelé de R. cette routine doit utiliser le module mymodule, et ce module a des dépendances sur myutils. je compile tous les trois objets partagés:

gfortran -shared -fPIC callFromR.f95 -o callFromR.so 
gfortran -shared -fPIC mymodule.f95 -o mymodule.so 
gfortran -shared -fPIC myutils.f95 -o myutils.so 

Maintenant je dois en quelque sorte de combiner les trois d'entre eux dans un fichier objet partagé (pas un fichier objet). Comment puis-je faire ceci?

(Par conséquent, quand je l'appelle le sous-programme callFromR dans R, certains sous-programmes qui se trouvent dans le code mymodule sont introuvables.)

+0

Qu'est-ce que cela signifie qu'ils ne sont pas trouvés? Importez-vous les trois fichiers .so ou juste un? –

Répondre

0

Vous pouvez d'abord créer des fichiers d'objets

gfortran -c -fPIC callFromR.f95 -o callFromR.o 
gfortran -c -fPIC mymodule.f95 -o mymodule.o 
gfortran -c -fPIC myutils.f95 -o myutils.o 

puis emballer les dans la bibliothèque

gfortran -shared callFromR.o mymodule.o myutils.o -o callFromR.so 
+0

De cette façon, la compilation donne des références non définies à ... /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: Dans Funktion '_start ': (.text + 0x20): Configurer Verweis auf' main' collect2: erreur: ld a renvoyé 1 état de sortie – jenna

+0

J'ai juste oublié le drapeau '-c'. De nombreuses questions et réponses expliquent cette erreur. –

+0

Merci, il compile avec l'exemple fictif que j'ai fait .. Aller tester si l'appel de R fonctionne plus tard – jenna