Fortran编译包含netcdf静态库的共享对象

时间:2017-10-12 14:28:49

标签: makefile fortran shared .so

我正在尝试在fortran中创建一个使用netcdf静态库的共享对象。 最终的目标是在R中使用这个共享对象,但我认为问题始于我的makefile,所以我只关注这个:

在我的makefile中,我使用以下标志

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

我想我设法将所有内容链接起来,(您在错误消息中看到下面的所有目标文件),但在下一步中,创建共享对象时,会出现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'

我发现类似的'问题,但由于我不熟悉术语,这是我第一次尝试生成共享对象,我无法按照他们的指示解决我的问题。

1 个答案:

答案 0 :(得分:0)

您需要安装NetCDF的动态​​(.so)版本,无论是从您的存储库还是自己编译它。正如tim18在评论中所说,它也需要用-fPIC编译,而.so版本将是。