我正试图在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库特定的错误消息:
'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'
我发现了"类似"的问题,但由于我不熟悉术语,而且这是我第一次尝试生成共享对象,所以我无法按照他们的指示解决我的问题。
您需要安装NetCDF的动态(.so)版本,可以从您的存储库中安装,也可以自己编译。正如tim18在评论中所说,它还需要使用-fPIC进行编译,.so版本将是.