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. 当我们增加自定义库的时候,为什么不需要重新编译上层应用?

当我们增加自定义库的时候,为什么不需要重新编译上层应用?

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

    众所周知,当我们编译好一个OF中新的自定义库libxxx.so的时候,我们只需要做的就是在controlDict文件夹中增加libs("libxxx.so")的一句话,此时我们就可以使用该库了。我想问的是,此处可以这样做的深层机制是什么?为什么我们可以通过增加libs("libxxx.so")的方式来避免重新编译上层应用呢?谁能解释下OF在此处用到的"黑魔法"呢?谢谢诸位!

    1 条回复 最后回复
  • 马乔马 离线
    马乔马 离线
    马乔 大神
    写于 最后由 编辑
    #2

    哪里“黑”了,正常操作而已,看看重要的类Time的构造,有一句

    if
        (
            argList::validOptions.found("no-libs")
          ? !args.found("no-libs")
          : true
        )
        {
            libs_.open(controlDict_, "libs");
        }
    

    主动去libs字典项查找库名,再参考这个
    https://www.cfd-china.com/topic/2837/运行时动态加载库?_=1618541781950
    很清晰明了的呀:chitang:

    装逼没输过,吵架没赢过!

    1 条回复 最后回复
  • MicroM 离线
    MicroM 离线
    Micro
    写于 最后由 编辑
    #3

    好的谢谢大佬!我按照您说的好好查一下,之前确实一直没有关注过Time类,没想到Time类中还会涉及到输入输出,主动查找controlDict中的关键字,我一直都是从IOobject类中去查找运行时加载库的相关功能,一直没有找到,所以才觉得有些“黑科技”。再次感谢!

    1 条回复 最后回复

  • 登录

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