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. undefined reference

undefined reference

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

    编译求解器的时候出现undedined reference错误。

    /usr/bin/ld: /home/dyfluid/OpenFOAM/OpenFOAM-v2006/build/linux64GccDPInt32Opt/applications/solvers/multiphase/twoPhaseChangePorousFoam/twoPhaseChangePorousFoam.o: in function `main':
    twoPhaseChangePorousFoam.C:(.text.startup+0x2b63): undefined reference to `Foam::porousInterfaceProperties::porousInterfaceProperties(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&, Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh> const&, Foam::IOdictionary const&)'
    /usr/bin/ld: twoPhaseChangePorousFoam.C:(.text.startup+0x89c5): undefined reference to `Foam::porousInterfaceProperties::porousInterfaceProperties(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&, Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh> const&, Foam::IOdictionary const&)'
    /usr/bin/ld: twoPhaseChangePorousFoam.C:(.text.startup+0x11e20): undefined reference to `Foam::porousInterfaceProperties::correct()'
    /usr/bin/ld: twoPhaseChangePorousFoam.C:(.text.startup+0x19e45): undefined reference to `Foam::porousInterfaceProperties::nearInterface() const'
    collect2: error: ld returned 1 exit status
    make: *** [/home/dyfluid/OpenFOAM/OpenFOAM-v2006/wmake/makefiles/general:150: /home/dyfluid/OpenFOAM/dyfluid-v2006/platforms/linux64GccDPInt32Opt/bin/twoPhaseChangePorousFoam] Error 1
    

    根据网上已有的错误来源进行了排查。

    • https://cfd-china.com/topic/926/未定义的引用-undefined-reference?_=1610429640554
      我的下面显示的错误函数并不是虚函数,在.C文件中有对member function进行定义。

    • https://cfd-china.com/topic/3699/编译求解器出现-undefined-reference/2?_=1610429640557
      cd $FOAM_USER_LIBBIN可以看到libporousInterfaceProperties.so文件,确实是在编译库中。接下来检查定义问题。
      在porousInterfaceProperties.H中声明

    porousInterfaceProperties
    (
                const volScalarField& alpha1,
                const volVectorField& U,
                const IOdictionary&
    );
    //- Destructor
    virtual ~porousInterfaceProperties() = default;
    

    在createFields.H中定义如下,参数的类型是一致的。

    porousInterfaceProperties interface
    (
        alpha1,
        U,
        transportProperties
    );
    
    • https://cfd-china.com/topic/3191/编译自己的求解器遇到问题-undefined-reference/2?_=1610429640560
      e034e38afc9c3e8de1934c1a8b58fff.png 6f424fda386852d17f52d4878d91800.png
      请教各位老师,可能是哪里出现了错误。
    H 1 条回复 最后回复
  • H 离线
    H 离线
    hongjiewang
    在 中回复了 hongjiewang 最后由 编辑
    #2

    @hongjiewang 已解决~不过我是把所有的库都编译在了FOAM_LIBBIN和FOAM_APPBIN下,所以应该是我的编译路径有问题~

    H 1 条回复 最后回复
  • H 离线
    H 离线
    hongjiewang
    在 中回复了 hongjiewang 最后由 编辑
    #3

    上面的办法并不可行~会出现Duplicate entry constantAlphaContactAngle in runtime selection table fvPatchField 等类似的错误。还是应该放在USER下

    1 条回复 最后回复
  • H 离线
    H 离线
    hongjiewang
    写于 最后由 编辑
    #4

    已经编译成功。错误的原因是,有其他的求解器中有相同的库,把其他的求解器编译的删除掉(因为那些求解器只是过渡 所以就选择删除了)或者命名为不同的库 可以减少这类错误的发生。这也是为啥放在of源代码的位置上就没有所述错误的原因。
    不过编译结束之后,会出现Duplicate entry错误,还没有解决这个问题,希望能得到各位老师的指导。谢谢~
    1610451995(1).png

    1 条回复 最后回复
  • bestucanB 离线
    bestucanB 离线
    bestucan 版主 大神
    写于 最后由 编辑
    #5

    这重的也太猛了……重了五个,如果说解决问题是开锁,这个锁眼都快堵死了:143:

    这是长期乱套导致的,越往后越纠缠不清。这问题太细致,一个操作都能写出来几个分叉,操作多了就说不全了。

    好习惯建议:

    https://cfd-china.com/topic/3190/分享一个在任意文件夹中编译库或求解器的办法

    这个里面我也跟了个帖子,是写在.bashrc里的,现在又改良了,就是下面这个代码,单独成一个文件,在openfoam里的etc/bashrc里加载。可以把代码和算例分开放,备份方便(被屏蔽的前三行)。还增加了openfoam里没有的快捷命令,可以把用户的东西(代码、二进制、算例)与自带的完全分开。

    #\$export FOAM_INST_DIR=\$HOME/.local/share/\$WM_PROJECT
    
    #export WM_PROJECT_USER_DIR=\$HOME/Documents/openfoam/\$USER-\$WM_PROJECT_VERSION
    #export WM_PROJECT_USER_CODE_DIR=\$HOME/Documents/code/C/openfoam/\$USER-\$WM_PROJECT_VERSION
    
    #-------------------------------------------------------------------------------
    export FOAM_USER_SRC=\$WM_PROJECT_USER_CODE_DIR/src;
    #-------------------------------------------------------------------------------
    export FOAM_USER_APP=\$WM_PROJECT_USER_CODE_DIR/applications;
    export FOAM_USER_SOLVERS=\$WM_PROJECT_USER_CODE_DIR/applications/solvers;
    export FOAM_USER_UTILITIES=\$WM_PROJECT_USER_CODE_DIR/applications/utilities;
    #-------------------------------------------------------------------------------
    export FOAM_USER_TUTORIALS=\$WM_PROJECT_USER_DIR/run/tutorials
    
    
    alias msrc='cd \$FOAM_USER_SRC'
    #-------------------------------------------------------------------------------
    alias mapp='cd \$FOAM_USER_APP'
    alias msol='cd \$FOAM_USER_SOLVERS'
    alias mutil='cd \$FOAM_USER_UTILITIES'
    #-------------------------------------------------------------------------------
    alias mtut='cd \$FOAM_USER_TUTORIALS'
    
    
    alias mappb='cd \$FOAM_USER_APPBIN'
    alias mlibb='cd \$FOAM_USER_LIBBIN'
    
    

    加载上面的代码的位置放在下面这个地方,我是连安装位置一起修改了,所以看起来比较乱(只看第三行,前两行是另一个修改,可以定位)。上面的代码我放在my_enviroment文件夹里,每个版本都有各自的,大体相同,不同处可以分开修改

    -export WM_PROJECT_USER_DIR=\$HOME/\$WM_PROJECT/\$USER-\$WM_PROJECT_VERSION
    +export WM_PROJECT_USER_DIR=\$HOME/.local/share/\$WM_PROJECT/\$USER-\$WM_PROJECT_VERSION
    +source \$FOAM_INST_DIR/my_environment/\$USER-$WM_PROJECT_VERSION
    

    openfoam自带的快捷命令在etc/config.sh/alisas,自定义的环境变量在etc/config.sh/setting。但是并不是每个环境变量都有带user版本的,快捷命令更没有。

    最好是不要有重名的库,不重名,其实放不放user都行,但是分开放更好。无论是备份自己的工作还是不弄乱原有的代码。

    还有一个好处就是,解决这种重复。即使库名字不冲突,但库内容冲突。比如不同的库中重复定义了同一个类。这时候把编译时要链接的库地址删了带冲突库的路径,这样就不冲突,甚至会缺。缺的单独拉到user里就行。

    滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

    异步沟通方式(《posting style》from wiki)(下载后打开):
    https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
    提问的智慧(github在gitee的镜像):
    https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way

    H 1 条回复 最后回复
  • H 离线
    H 离线
    hongjiewang
    在 中回复了 bestucan 最后由 编辑
    #6

    @bestucan 终于解决啦 谢谢老师 感谢分享~:ok3:

    1 条回复 最后回复

  • 登录

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