首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >和对“__[module_name]_MOD_[function_name]”的未定义引用

和对“__[module_name]_MOD_[function_name]”的未定义引用
EN

Stack Overflow用户
提问于 2015-01-15 12:57:29
回答 1查看 3.2K关注 0票数 2

我正在用Fortran编写一个程序,它使用.mod文件、.dll库和.h头。

当我调用编译器时,我肯定忘记了什么,因为我得到了错误:未定义的对‘__MOD_MOD_ function_name’的引用,其中module_name是主程序使用的一个模块的名称,而function_name是模块中包含的函数的名称。

唯一的源文件名为MAIN.f90:

代码语言:javascript
复制
! WORHP workspace access macros
#include "worhp/macros.h"

MODULE WORHP_INTERFACE

  USE std
  USE problem_definition_tools

CONTAINS

  SUBROUTINE OBJ(N,X,F) BIND(C)
    INTEGER(WORHP_INT)  :: N
    REAL(WORHP_DOUBLE)  :: X(N),F
    INTENT(in)          :: N, X
    INTENT(out)         :: F
    F = X(1)
  END SUBROUTINE OBJ

  SUBROUTINE CON(N,M,X,G) BIND(C)
    INTEGER(WORHP_INT)  :: N,M
    REAL(WORHP_DOUBLE)  :: X(N),G(M)
    INTENT(in)          :: N, M, X
    INTENT(out)         :: G
    TYPE (orbit)        :: O
    O = final_orbit(X)
    G = [O%Lp, O%La]
  END SUBROUTINE CON

  SUBROUTINE DOBJ(N,dfnnz,DFROW,X,DF) BIND(C)
    INTEGER(WORHP_INT)  :: N,dfnnz,DFROW(DFnnz)
    REAL(WORHP_DOUBLE)  :: X(N),DF(DFnnz)
    INTENT(in)          :: N, DFnnz, DFrow, X
    INTENT(out)         :: DF
    DF = [1, 0, 0, 0, 0, 0]
  END SUBROUTINE DOBJ

  SUBROUTINE DCON(N,M,DGnnz,DGROW,DGCOL,X,DG) BIND(C)
    INTEGER(WORHP_INT)  :: N,M,DGnnz,DGROW(DGnnz),DGCOL(DGnnz)
    REAL(WORHP_DOUBLE)  :: X(N),DG(DGnnz)
    INTENT(in)          :: N,M,DGnnz,DGrow,DGcol,X
    INTENT(out)         :: DG
    ! Dummy
  END SUBROUTINE DCON

  SUBROUTINE HESS(N,M,HMnnz,HMrow,HMcol,X,Mu,HM) BIND(C)
    INTEGER(WORHP_INT)  :: N, M, HMnnz, HMrow(HMnnz), HMcol(HMnnz)
    REAL(WORHP_DOUBLE)  :: X(N),Mu(M),HM(HMnnz)
    INTENT(in)          :: N, M, HMnnz, HMrow, HMcol, X, Mu
    INTENT(out)         :: HM
    ! Dummy
  END SUBROUTINE HESS

END MODULE WORHP_INTERFACE

program MAIN

  USE WORHP_INTERFACE
  USE Worhp_User

  INTEGER (WORHP_INT) :: Mode, N, M, DFnnz, DGnnz, HMnnz
  PARAMETER (N=6, M=2, DFnnz=1, DGnnz=12, HMnnz=12)
  INTEGER (WORHP_INT) :: DFrow(DFnnz), DGrow(DGnnz), DGcol(DGnnz)
  INTEGER (WORHP_INT) :: HMrow(HMnnz), HMcol(HMnnz)
  INTEGER (WORHP_INT) :: Iparam(10)
  REAL (WORHP_DOUBLE) :: X(N), L(N+M), U(N+M), Dparam(10)
  REAL (WORHP_DOUBLE) :: Infty = 1d20

  ! Check Version of library and header files
  CHECK_WORHP_VERSION

  L = [9000.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200000.0, 35786000.0]
  U = [10000.0, 5.0, 180.0, 0.15, 180.0, 0.15, 200000.0, 35786000.0]

  X = [9520.00, 1.47490136, 71.50755639, 0.09948622, 97.00248532, 0.09296147]

  DFrow = [6]
  DGrow = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
  DGcol = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]
  HMrow = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
  HMcol = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6]

  ! Get default parameter values
  Mode = 0

  CALL WorhpSimple(Mode, N, M, X, L, U, Dparam, Iparam, &
       DFnnz, DFrow, DGnnz, DGrow, DGcol, HMnnz, HMrow, HMcol, &
       OBJ, CON, DOBJ, DCON, HESS)

  ! User-defined derivatives are available
  Iparam(1) = 1
  Iparam(2) = 0
  Iparam(3) = 0

  ! Run the solver
  Mode = 1

  CALL WorhpSimple(Mode, N, M, X, L, U, Dparam, Iparam, &
       DFnnz, DFrow, DGnnz, DGrow, DGcol, HMnnz, HMrow, HMcol, &
       OBJ, CON, DOBJ, DCON, HESS)

end

子例程final_orbit调用的函数CON包含在模块"problem_definition_tools“中。

在编译过程中,我使用以下名为"compile.bat“的windows批处理文件

x86_64-w64-mingw32-gfortran src\MAIN.f90 -cpp -Iinclude -Ifinclude\worhp -Ifinclude\aerospace -Jobj -Lbin -lworhp -o bin\megaceppa.exe

这给出了错误

undefined reference to '__problem_definition_tools_MOD_final_orbit'

我从目录'Test‘运行该命令,该目录具有以下结构

  • \bin\
    • libworhp.dll

  • finclude
    • worhp\
      • std.mod

代码语言:javascript
复制
- \aerospace\ 
    - problem\_definition\_tools.mod

  • 包括
    • worhp\
      • macros.h

  • lib
    • libworhp.lib

  • obj
    • worhp_interface.mod

  • src
    • MAIN.f90

  • compile.bat

我想指定模块"problem_definition_tools“是由我编写的,而且我确信它可以工作,因为我已经在另一个程序中使用了它。此外,我用x86_64-w64-mingw32-gfortran重新编译了它,以避免与该程序的任何兼容性问题。

我确信我调用编译器的方式有问题,但由于我对Fortran的经验有限,我无法解决这个问题。我也尝试在这个网站上搜索类似的问题,但我找不到任何与我的问题密切相关的问题。

EN

回答 1

Stack Overflow用户

发布于 2017-07-20 23:48:16

我认为这可能与final_orbit函数的某些声明有关。

这似乎接近于以下问题:

Linking fortran module: "undefined reference"

我认为问题应该在模块problem_definition_tools的代码中找到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27964006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档