2017-10-12 133 views
0

我想在fortran中创建一个使用netcdf静态库的共享对象。 最终目的是使用读该共享对象,但我认为这个问题与我的makefile开始,所以我只是专注于这个位置:Fortran编译共享对象,其中包括netcdf静态库

在我的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' 

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

+0

嗯,是的,如果你不使用兼容的netcdf,那么netcdf中的对象也需要使用pic的可重定位性来构建,所以 – tim18

回答

0

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

+0

谢谢你,这个工作! –