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



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


  • 副教授

    哪里“黑”了,正常操作而已,看看重要的类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:



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


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1