1. 问题描述
在使用Intel版本的Mac编译某个程序时出现了错误,显示如下图。
说明:libnetcdff是netcdf的Fortran的接口,如下ChatGPT解释。
2. 出现的原因
原因是Makefile中定义的静态库链接并没有在系统默认的库路径下找到,默认的路径如/usr/lib, /lib或者/usr/local/lib等路径下。下图是Makefile中出错的部分,可以看到并没有事先定义NETCDF_PATH,所以会直接进入else条件中执行-lnetcdff在系统默认的库路径下去搜索,而系统默认的路径下又找不到相关文件,所以会报错。
3.解决办法
3.1 办法1
直接在Makefile中定义libnetcdff的路径。
这里出现了一个坑,在Mac系统上我使用Homebrew进行安装netcdf,命令如下:
brew install netcdf
巨坑:
但我在netcdf的lib文件下并没有找到libnetcdff库文件!!!
我使用brew搜索netcdf的可用软件,发现还有一个特定的netcdf-fortran版本....
回归正题:
将netcdf-fortran安装之后再在Makefile中指定libnetcdff的路径即可成功解决。
3.2 方法2
可以在make之前先定义一下搜索路径,但只是暂时的,下次开关机之后会无效。
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/Cellar/netcdf-fortran/4.6.0/lib
3.3 方法3
将文件libnetcdff.a拷贝到/usr/lib目录下(其他linux系统可行或许,但Mac存在保护机制,没有权限对/usr/lib进行操作)
除非手动屏蔽 SIP ( System Intergerity Protection ) ,恢复权限。
or启用前两个可行方法。
cp /usr/local/Cellar/netcdf-fortran/4.6.0/lib/libnetcdff.a /usr/lib