【问题标题】:Fortran compile shared object which includes netcdf static libraryFortran 编译包含 netcdf 静态库的共享对象
【发布时间】:2023-03-11 14:12:02
【问题描述】:

我正在尝试在 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'

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

【问题讨论】:

  • 嗯,是的,如果您不使用兼容的 netcdf,netcdf 中的对象也需要使用 pic 可重定位性构建。,所以

标签: makefile fortran shared .so


【解决方案1】:

您需要安装 NetCDF 的动态 (.so) 版本,无论是从您的存储库还是通过自己编译。正如tim18在cmets中所说,也需要用-fPIC编译,.so版本就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    相关资源
    最近更新 更多