Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 关于"xxx.so对“XXX”未定义的引用"错误

关于"xxx.so对“XXX”未定义的引用"错误

已定时 已固定 已锁定 已移动 OpenFOAM
7 帖子 4 发布者 5.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 一 离线
    一 离线
    一颗鸭蛋
    写于 最后由 编辑
    #1

    在OpenFOAM2.3中,将自定义2.1的湍流模型编译到OpenFOAM2.3 src/turbulenceModels/RAS 源库中,然后编译求解器时,会出现如下错误:

    /home/kdd/OpenFOAM/OpenFOAM-2.3.1/platforms/linux64GccDPOpt/lib/libincompressibleRASModels.so:对'Foam::incompressible::RASModels::kOmegaMHD::divDevRhoReff(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&, Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh>&) const'未定义的引用
    collect2: error: ld returned 1 exit status
    make: *** [/home/kdd/OpenFOAM/kdd-2.3.1/platforms/linux64GccDPOpt/bin/MHDRASpisoFoam] Error 1
    /home/kdd/OpenFOAM/OpenFOAM-2.3.1/wmake/Makefile:149: recipe for target '/home/kdd/OpenFOAM/kdd-2.3.1/platforms/linux64GccDPOpt/bin/MHDRASpisoFoam' failed
    

    报错原因显示无法从 libincompressibleRASModels.so库中定位到divDevRhoReff这个可压缩函数。根据这个错误找到我们自己先前在源库中自己编译进去的湍流模型kOmegaMHD发现,在H文件已经添加的divDevRhoReff 这个函数,如下:

    //- Return the source term for the momentum equation
        virtual tmp<fvVectorMatrix> divDevRhoReff
        (
            const volScalarField& rho,
            volVectorField& U
        ) const; 
    

    但是在湍流模型的kOmegaMHD的C文件中却没有关于这个函数的具体实现。就是这个原因导致虽然能够将湍流模型编译成功,但是在编译可执行文件/程序(求解器)时(我们在Options中链接了-lincompressibleRASModels动态库)报错。因为C/C++编译为obj文件的时候只要有函数的原型(H文件中的函数)即可,不需要函数的具体实现,但在链接为可执行文件的时候就必须要具体的实现(.C中与.H中函数对应的函数的具体形式)。
    所以在C文件中将divDevRhoReff函数的具体实现写进去,如下:

    tmp<fvVectorMatrix> kOmegaMHD:;divDevRhoReff
    (
     const volScalarField& rho,
       volVectorField& U
    ) const
    {
        volScalarField muEff("muEff",rho*nuEff());
    
       return
       (
        - fvm::laplacian(muEff,U)
        -fvc::div(muEff*dev(T(fvc::grad(U))))
       );
    }
    

    重新编译湍流模型,然后在编译求解器,就能成功了。还需要注意的是,当我将湍流模型只编译到自己的模型库中,编译求解器时并没有报错(因为没有连接到这个模型),只会在算例调用这个模型时显示如上错误(同时还会附带dlopen函数无法打开(和无法加载)该湍流模型。

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #2

    看你做这个东西好几天了 终于弄出来了 恭喜!
    感谢鸭蛋分享 楼主好人 另外我听说你师姐毕业了 @一颗李子 @一颗栗子 @一颗橙子 不知道是其中哪个

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    一 1 条回复 最后回复
  • 一 离线
    一 离线
    一颗栗子
    在 中回复了 李东岳 最后由 编辑
    #3

    @东岳 东岳老师听说的很准确。不出意外的话我明年四月毕业。

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #4

    看你们队形这么好,我都想叫一颗东岳了 :chitang: 我还认识一个女博士,做CFD+实验的,人在国外,老公在国内,孩子刚出生,没人帮着带,自己做实验,各种不会,异国他乡,看朋友圈每天都各种悲剧,有时候孩子生病了,有时候被老外歧视了,不知道什么时候能毕业

    感觉能如期毕业,真应该好好庆祝一下。都太难了 :zoule: 恭喜你

    鸭蛋那个问题也是,程序上有时候都是特别小的细节错误,很难debug,有时候我一个 + 号写成了 - 号,就发散了,谁都不知道为什么,只能自己找找,同样恭喜鸭蛋

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    一 1 条回复 最后回复
  • 一 离线
    一 离线
    一颗鸭蛋
    在 中回复了 李东岳 最后由 编辑
    #5

    @东岳 谢谢东岳老师😄😄😄

    1 条回复 最后回复
  • S 离线
    S 离线
    Samuel-Tu
    写于 最后由 编辑
    #6

    这个问题就是虚基类和虚函数。在虚基类中声明虚函数,提供了一个接口。但是在子类中要具体定义这个函数。我印象中divDevRhoReff是在linearViscousStress中具体定义的

    一 1 条回复 最后回复
  • 一 离线
    一 离线
    一颗鸭蛋
    在 中回复了 Samuel-Tu 最后由 编辑
    #7

    @Samuel-Tu 嗯嗯

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]