Module Fortran链接错误:未定义对“***\u mp\u***\ u”的引用

Module Fortran链接错误:未定义对“***\u mp\u***\ u”的引用,module,linker,makefile,fortran,Module,Linker,Makefile,Fortran,我认为我的问题可能与许多人有关,因为今天许多科学项目都在使用Fortran,它们大多包含大量的文件,使用Make,并且程序经常从其他模块调用函数 一个程序正在调用模块tsmio.mod的公共子例程readtsmfile 此程序测试使用tsmio.F90和tsmformat.F90。对应的CMakeList文件: include_directories(${CMAKE_BINARY_DIR}/src) include_director

我认为我的问题可能与许多人有关,因为今天许多科学项目都在使用Fortran,它们大多包含大量的文件,使用Make,并且程序经常从其他模块调用函数

一个程序正在调用模块tsmio.mod的公共子例程readtsmfile

此程序测试使用tsmio.F90和tsmformat.F90。对应的CMakeList文件:

include_directories(${CMAKE_BINARY_DIR}/src)                                
include_directories(${CMAKE_BINARY_DIR}/test)
include_directories(${CMAKE_BINARY_DIR}/utils/xml/sax)
add_executable(test_tsmparser test_tsmparser.F90)
模块tsmio.F90本身也使用tsmformat.F90。库模块文件夹的CMakeList:

include_directories(${SplineLib_BINARY_DIR}/utils/xml/strings)                                                                                                        
include_directories(${SplineLib_BINARY_DIR}/utils/xml/sax)
include_directories(${SplineLib_BINARY_DIR}/utils/xml/dom)
include_directories(${SplineLib_BINARY_DIR}/src)
include_directories(${SplineLib_BINARY_DIR}/utils/strings)
set(splinelib_src
   utils.F90 global.F90 basisFunctions.F90 bezierPatches.F90
   bezierConverter.F90 tSplineFormat.F90 pbsplines.F90 meshes.F90       nurbs.F90
   igaio.F90 tspsio.F90 xmlio.F90 igesio.F90
   tsmio.F90 TSMFormat.F90 tsmConverter.F90
   abstractSpline_geomOps.F90 abstractSpline.F90)

 add_library(splinelib ${splinelib_src})

install(TARGETS splinelib DESTINATION ${CMAKE_SOURCE_DIR}/lib)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/basfnc.mod
    ${CMAKE_CURRENT_BINARY_DIR}/errhndl.mod
    ${CMAKE_CURRENT_BINARY_DIR}/glblconst.mod
    ${CMAKE_CURRENT_BINARY_DIR}/mathfcn.mod
    ${CMAKE_CURRENT_BINARY_DIR}/pbsplines.mod
    ${CMAKE_CURRENT_BINARY_DIR}/bezierpatches.mod
    ${CMAKE_CURRENT_BINARY_DIR}/bezierconverter.mod
    ${CMAKE_CURRENT_BINARY_DIR}/igaio.mod
    ${CMAKE_CURRENT_BINARY_DIR}/tspsio.mod
    ${CMAKE_CURRENT_BINARY_DIR}/xmlio.mod
    ${CMAKE_CURRENT_BINARY_DIR}/igesio.mod
    ${CMAKE_CURRENT_BINARY_DIR}/nurbs.mod
    ${CMAKE_CURRENT_BINARY_DIR}/abstrspl_geomops.mod
    ${CMAKE_CURRENT_BINARY_DIR}/abstrsplmod.mod
    ${CMAKE_CURRENT_BINARY_DIR}/tsplineformat.mod
    ${CMAKE_CURRENT_BINARY_DIR}/tsmformat.mod
    ${CMAKE_CURRENT_BINARY_DIR}/tsmio.mod
    ${CMAKE_CURRENT_BINARY_DIR}/tsmconverter.mod
    DESTINATION ${CMAKE_SOURCE_DIR}/lib)`
在创建过程中,我收到一个错误:

Linking Fortran executable test_tsmparser   
 cd /home/tk207547/src/splinelib/build/test/cases/tsm && /usr/bin/cmake -E cmake_link_script CMakeFiles/test_tsmparser.dir/link.txt --verbose=1
/opt/intel/Compiler/14.0/3.174/rwthlnk/bin/intel64/ifort      -warn -stand f08 -free -std08 CMakeFiles/test_tsmparser.dir/test_tsmparser.F90.o  -o test_tsmparser  -L/home/tk207547/src/splinelib/lib -i_dynamic 
CMakeFiles/test_tsmparser.dir/test_tsmparser.F90.o: In function `MAIN__':
/home/tk207547/src/splinelib/test/cases/tsm/test_tsmparser.F90:(.text+0x146): undefined reference to `tsmio_mp_readtsmfile_'
由于某些原因,它似乎看不到这个模块或这个函数,但我不明白为什么

模块文件tsmio.mod已创建,函数为公共


我应该在哪里搜索问题?

您应该告诉CMake将测试与splinelib链接:


在此语句中包括代码所依赖的所有其他库

导致这种情况的编译命令应该在您的问题中。我的情况不同,因为我使用Cmake和Make来构建、链接和编译整个项目。无论您是否使用Cmake、Make、SCons、waf或其他什么,重要的是构建系统对链接器或编译器的命令。你应该包括你所有的信息。可能还有Makefiles。这不是命令,cmake默认情况下会隐藏它,您必须启用详细输出。请参阅
target_link_libraries(test_tsmparser splinelib)