2017-10-12 9 views
0

J'essaie de créer un objet partagé dans fortran, qui utilise la bibliothèque statique netcdf. Le but ultime est d'utiliser cet objet partagé dans R, mais je pense que le problème commence avec mon makefile, donc je suis de se concentrer uniquement sur ce ici:Fortran compile l'objet partagé qui inclut la bibliothèque statique netcdf

Dans mon makefile j'utilise les drapeaux suivants

'F90 = ifort 
FFLAGS = -O3 -fPIC -r8 # double-precision now run in Fortran , -fpic 
for creating shared object file 
LDFLAGS = -lnetcdff -lnetcdf -shared #-shared, for creating a shared  
object file' 

Je pense que j'ai réussi à lier tout bien, (vous voyez tous mes fichiers objets dans le message d'erreur), mais à l'étape suivante, lors de la création de l'objet partagé, il y a un message d'erreur spécifique à netcdf-library:

'ifort -O3 -fPIC -r8 -o HX.so HX.o HANDLE_ERR.o GET_CLM.o INTEGRATE.o 
CLIMATE.o STATE.o PARAMETERS.o CONTROL.o HYDRO.o DYNAMICS.o CARBON.o 
RINGS.o INIT.o SET_PARAMS.o -lnetcdff -lnetcdf -shared 
ld: /usr/local/Cluster-Apps/netcdf/4.1.3/lib/libnetcdff.a(netcdf4.o): 
relocation R_X86_64_32 against `.bss' can not be used when making a 
shared object; recompile with -fPIC 
/usr/local/Cluster-Apps/netcdf/4.1.3/lib/libnetcdff.a: could not read  
symbols: Bad value 
make: *** [HX.so] Error 1' 
Je trouve des problèmes «similaires», mais comme je ne suis pas familier avec la terminologie et ceci est mon premier essai dans la génération d'un objet partagé, je ne peux pas suivre leurs instructions pour mon problème.

+0

Eh bien, oui, les objets dans netcdf devraient également être construits avec la relocalisation de pic, si vous n'utilisez pas un netcdf compatible., Alors – tim18

Répondre

0

Vous devez installer la version dynamique (.so) de NetCDF, que ce soit à partir de votre référentiel ou en la compilant vous-même. Comme le dit tim18 dans les commentaires, il doit aussi être compilé avec -fPIC, et la version .so le sera.

+0

merci, cela a fonctionné! –