Fortran linking error : undefined reference to `***_mp_***_'
Fortran linking error : undefined reference to `***_mp_***_'
我想我的问题可能与很多人有关,因为现在许多科学项目都在使用 Fortran,它们大多包含大量文件,使用 Make,程序经常调用其他模块的函数。
一个程序正在调用模块 "tsmio.mod" 的 public 子例程 "readtsmfile"。
这个程序(test_tsmparser.F90)使用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已创建,功能为public...
我应该在哪里搜索问题?
你应该告诉 CMake link test_tsmparser
反对 splinelib
:
target_link_libraries(test_tsmparser splinelib)
在此语句中包括您的代码所依赖的所有其他库。
我想我的问题可能与很多人有关,因为现在许多科学项目都在使用 Fortran,它们大多包含大量文件,使用 Make,程序经常调用其他模块的函数。
一个程序正在调用模块 "tsmio.mod" 的 public 子例程 "readtsmfile"。
这个程序(test_tsmparser.F90)使用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已创建,功能为public...
我应该在哪里搜索问题?
你应该告诉 CMake link test_tsmparser
反对 splinelib
:
target_link_libraries(test_tsmparser splinelib)
在此语句中包括您的代码所依赖的所有其他库。