Cmake ld:找不到-lnetcdf的库
我是新来的。我无法解决流动错误。有人能帮我吗 ------------错误--------------Cmake ld:找不到-lnetcdf的库,cmake,gfortran,netcdf,Cmake,Gfortran,Netcdf,我是新来的。我无法解决流动错误。有人能帮我吗 ------------错误-------------- PROGRAM unpack_array IMPLICIT NONE INCLUDE 'netcdf.inc' INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12,307) ...... -------------------CMake文件------------------ PROGRAM unpack_array IMP
PROGRAM unpack_array
IMPLICIT NONE
INCLUDE 'netcdf.inc'
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12,307)
......
-------------------CMake文件------------------
PROGRAM unpack_array
IMPLICIT NONE
INCLUDE 'netcdf.inc'
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12,307)
......
--------------解包f90-------------------
PROGRAM unpack_array
IMPLICIT NONE
INCLUDE 'netcdf.inc'
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(12,307)
......
我用的是MACOS Catalina。Apple clang 11.0.3版(clang-1103.0.32.59)
目标:x86_64-apple-darwin19.4.0如果使用
find_package()
在计算机上查找NetCDF,则不需要手动指定路径。让find_package
为您做这件事
注意:CMake不附带for NetCDF,因此您必须从internet下载一个(如)。然后,您需要使用CMake模块路径告诉CMake在系统上查找此FindNetCDF.CMake
文件的位置。最后,您可以使用导入的目标将NetCDF链接到项目的目标
cmake_minimum_required(VERSION 3.10.0)
project(NUP Fortran)
# Don't need this, you already enabled Fortran above in the 'project' call.
enable_language(Fortran)
set(INCLUDE_FILE /usr/local/Cellar/netcdf/4.7.4/include)
set(lib_FILE /usr/local/Cellar/netcdf/4.7.4/lib)
# Add the location of the 'FindNetCDF.cmake' file to your module path.
list(APPEND CMAKE_MODULE_PATH "/path/to/downloaded/find/module")
# Then, call find package for NetCDF.
find_package(NetCDF REQUIRED)
if(${NetCDF_FOUND})
# Don't need this if you use the imported target below.
include_directories(${INCLUDE_FILE})
# Don't provide directories with source file list.
set(SOURCE_FILES
${PROJECT_BINARY_DIR}
unpack.f90
)
add_executable(NUP ${SOURCE_FILES})
# Use the imported target to link netcdf instead.
target_link_libraries(NUP PRIVATE NetCDF::NetCDF)
endif()
cmake_最低要求(3.10.0版)
项目(NUP Fortran)
#不需要这个,您已经在上面的“项目”调用中启用了Fortran。
启用_语言(Fortran)
设置(包括文件/usr/local/ceral/netcdf/4.7.4/INCLUDE)
set(lib_文件/usr/local/ceral/netcdf/4.7.4/lib)
#将“FindNetCDF.cmake”文件的位置添加到模块路径中。
列表(将CMAKE_模块_路径“/路径/添加到/下载/查找/模块”)
#然后,调用NetCDF的find包。
查找包(需要NetCDF)
if(${NetCDF_FOUND})
#如果使用下面导入的目标,则不需要此选项。
包含目录(${include\u FILE})
#不提供包含源文件列表的目录。
设置(源文件)
${PROJECT\u BINARY\u DIR}
解包f90
)
添加可执行文件(NUP${SOURCE\u FILES})
#使用导入的目标链接netcdf。
目标链接库(NUP专用NetCDF::NetCDF)
endif()
如前所述,有其他方法可以将NetCDF添加到CMake项目中。如果使用不同的查找模块,则提供的NetCDF CMake变量和导入目标的语法可能略有不同。您必须检查find模块文件本身
此外,您可以使用从internet下载的CMake包配置文件(例如netCDFConfig.CMake
)将NetCDF添加到项目中。在这种情况下,您仍将使用find_package()
,但您将使用CMAKE_PREFIX_PATH
而不是CMAKE_MODULE_PATH
指定配置文件的位置
您可以在CMake文档中找到这些方法的详细描述。我强烈建议您花些时间阅读。由于问题中的代码没有CMAKE_MODULE_PATH
设置,因此asker更可能使用“Config”文件来查找包,而不是“find”文件。声明netCDF::netCDF
为导入目标。非常感谢您的帮助!你们两个。我只是根据你的建议修改了代码。但我遇到了另一个错误,我无法解决:架构x86_64的未定义符号:“nf_close”,引用自unpack.f90中的:MAIN_u。o@Tsyvarev谢谢,我现在知道CMake没有提供开箱即用的“查找”模块。@mengjiewarmuth我只是找时间更新我的回复。我提供了将NetCDF添加到项目中的更多细节。希望这有帮助!