什么是未定义的参考/未解决的外部符号错误?什么是常见原因以及如何修复/预防它们?
随意编辑/添加您自己的.
c++ c++-faq linker-errors unresolved-external undefined-reference
我想编译一个使用 NetCDF 的 fortran 90 文件。我已经安装的NetCDF,Fortran语言,如图所示这里,对文件进行编译test_nc.f90:
program test_nc
use netcdf
implicit none
integer :: ncid, nc_err
nc_err = nf90_open('test.nc', nf90_nowrite, ncid)
nc_err = nf90_close(ncid)
end program test_nc
Run Code Online (Sandbox Code Playgroud)
用 gfortran 编译是
gfortran test_nc.f90 -o test_nc `nf-config --fflags --flibs`
Run Code Online (Sandbox Code Playgroud)
在哪里nf-config --fflags --flibs:
-I/usr/include
-L/usr/lib -lnetcdff -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -lnetcdf -lnetcdf -ldl -lz -lcurl -lm
Run Code Online (Sandbox Code Playgroud)
用子程序替换程序是
subroutine test_nc
use netcdf
implicit none
integer :: ncid, nc_err
nc_err = nf90_open('test.nc', nf90_nowrite, ncid)
nc_err = nf90_close(ncid)
end subroutine test_nc …Run Code Online (Sandbox Code Playgroud) 好的,这里有新问题.
我正在尝试编译simple_xy_wr.f90 - 一个netCDF示例程序 - 在Ubuntu上使用gfortran,我必须做一些非常愚蠢的事情; 我没有太多编译Fortran的经验.
首先,我安装了libnetcdf-dev软件包,其中包含类似的文件
/usr/lib/libnetcdf.a
/usr/lib/libnetcdff.a
/usr/include/netcdf.mod
Run Code Online (Sandbox Code Playgroud)
所以,我试图用(各种命令)编译代码
f95 -o xy -I/usr/include/ -L/usr/lib/ -lnetcdff -lnetcdf simple_xy_wr.f90
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
/tmp/ccE6g7sr.o: In function `check.1847':
simple_xy_wr.f90:(.text+0x72): undefined reference to `__netcdf_MOD_nf90_strerror'
/tmp/ccE6g7sr.o: In function `MAIN__':
simple_xy_wr.f90:(.text+0x284): undefined reference to `__netcdf_MOD_nf90_create'
simple_xy_wr.f90:(.text+0x2b6): undefined reference to `__netcdf_MOD_nf90_def_dim'
simple_xy_wr.f90:(.text+0x2e8): undefined reference to `__netcdf_MOD_nf90_def_dim'
simple_xy_wr.f90:(.text+0x432): undefined reference to `__netcdf_MOD_nf90_def_var_manydims'
simple_xy_wr.f90:(.text+0x468): undefined reference to `__netcdf_MOD_nf90_enddef'
simple_xy_wr.f90:(.text+0x4aa): undefined reference to `__netcdf_MOD_nf90_put_var_2d_fourbyteint'
simple_xy_wr.f90:(.text+0x4cb): undefined reference to `__netcdf_MOD_nf90_close'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我认为我包括了正确的库.例如,似乎__netcdf_MOD_nf90_strerror应该在那里: …