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
25 帖子 4 发布者 17.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    huiCfd
    在 中回复了 李东岳 最后由 编辑
    #11

    @东岳 感谢东岳老师回复,我又看了一下错误提示,出现问题的都是我写的虚函数。

    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 huiCfd 最后由 编辑
    #12

    @huiCfd 构造函数和析构函数是不是忘记定义了?

    H 1 条回复 最后回复
  • H 离线
    H 离线
    huiCfd
    在 中回复了 wwzhao 最后由 编辑
    #13

    @wwzhao 赵教授,这两个函数我记得定义了,

        // Constructors
           netPanel
           (
               const dictionary&        netDict
           );
    
        //- Destructor
        ~netPanel();
    

    但是我有一点不太明白,为什么有的函数后面有一个const,有的没有。例如:
    这个虚函数是void funname() const;

    void addResistance
            (
                fvVectorMatrix&         UEqn,
                const volScalarField&   nu,
                const fvMesh&           mesh,
                const matrix&   structuralPositions,
                const matrix&   structuralElements
            )const;
    

    而这个函数是 bool funname(); 就没有const了。

            bool isInPorousZone
            (
                const point             x,
                const volVectorField&   structuralPositions,
                const vector&           structuralElementi
            );        
    

    const 在括号里面我知道是可以保证传入的参数不变,但是在外边是啥意思啊?

    H W 2 条回复 最后回复
  • H 离线
    H 离线
    huiCfd
    在 中回复了 huiCfd 最后由 编辑
    #14

    @huiCfd
    这个函数后面的const 是用来保护类的成员数据不发生改变。

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 huiCfd 最后由 编辑
    #15

    @huiCfd 你这个只是声明(declaration),有没有具体的定义(definition)?

    H 1 条回复 最后回复
  • H 离线
    H 离线
    huiCfd
    在 中回复了 wwzhao 最后由 编辑
    #16

    @wwzhao
    定义也是有的。如下

    Foam::netPanel::netPanel
    (
        const dictionary&        netDict
    )
    :   // initial components
        netDict_(netDict),
        porousPropertiesDict_(netDict_.subDict("porousProperties")),
        porosity_(readScalar(porousPropertiesDict_.lookup("porosity"))),
        thickness_(readScalar(porousPropertiesDict_.lookup("halfthickness")))
        // D_(readVector(porousPropertiesDict_.lookup("D"))),  // initial as zeros
        // F_(readVector(porousPropertiesDict_.lookup("D")))  // initial as zeros
    {
        dimensionedVector D_(porousPropertiesDict_.lookup("D"));
        dimensionedVector F_(porousPropertiesDict_.lookup("F"));
    
    }
    
    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 huiCfd 最后由 编辑
    #17

    @huiCfd 把 netPanel.so 重命名成 libnetPanel.so 试试呢?

    H 1 条回复 最后回复
  • H 离线
    H 离线
    huiCfd
    在 中回复了 wwzhao 最后由 编辑
    #18

    @wwzhao 不行。。

    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 huiCfd 最后由 编辑
    #19

    @huiCfd $(FOAM_USER_LIBBIN) 后面的换行符去掉了吗?

    H 1 条回复 最后回复
  • H 离线
    H 离线
    huiCfd
    在 中回复了 wwzhao 最后由 编辑
    #20

    @wwzhao 是的,去掉何不去掉都试过了,
    去掉后显示的错误是

     -lm -o /home/hui/OpenFOAM/hui-v1906/platforms/linux64GccDPInt32Opt/bin/dynaPorousNetFoam
    /usr/bin/ld: cannot find -llibnetPanel
    collect2: error: ld returned 1 exit status
    /opt/OpenFOAM/OpenFOAM-v1906/wmake/makefiles/general:140: recipe for target '/home/hui/OpenFOAM/hui-v1906/platforms/linux64GccDPInt32Opt/bin/dynaPorousNetFoam' failed
    make: *** [/home/hui/OpenFOAM/hui-v1906/platforms/linux64GccDPInt32Opt/bin/dynaPorousNetFoam] Error 1
    

    没去掉的话跟原来的错误一样,都是undefined reference

    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 huiCfd 最后由 编辑
    #21

    @huiCfd
    1、去掉$(FOAM_USER_LIBBIN)后的换行符,注意后面的 netPanel 前不要加lib

    EXE_LIBS = \
        -L$(FOAM_USER_LIBBIN) -lnetPanel \
    

    2、编译出来的 netPanel.so 文件重命名为 libnetPanel.so

    H 1 条回复 最后回复
  • H 离线
    H 离线
    huiCfd
    在 中回复了 wwzhao 最后由 编辑
    #22

    @wwzhao
    成功了啊! 非常感谢。。
    是不可以总结如下经验:

    1. 自己编写的类在编译时一定要以lib开头,
    2. 然后在编译主程序时,$(FOAM_USER_LIBBIN)后面不能有换行符,
    3. -l之后直接跟自己编译的东西但是要去掉lib
    H 1 条回复 最后回复
  • H 离线
    H 离线
    huiCfd
    在 中回复了 huiCfd 最后由 编辑
    #23

    @huiCfd 可能这个适用于of1906

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    写于 最后由 编辑
    #24

    说明一下:

    1、换行符(\)不能随便用,必须用在行尾。如果用在行中间,那么换行符后面的内容都会被忽略,所以你加的 -lnetPanel 没用。

    2、-lfoo 会找名为 libfoo.so 的库文件,-l:bar.so 则会找 bar.so 文件,这是 gcc 的链接规则。

    H 1 条回复 最后回复
  • H 离线
    H 离线
    huiCfd
    在 中回复了 wwzhao 最后由 编辑
    #25

    @wwzhao 非常感谢指点迷津!

    1 条回复 最后回复

  • 登录

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