Cling听起来是一个很好的方法,可以用来修改大型库的API以用于学习。不幸的是,甚至没有关于如何开始使用它的文档或教程。我不断遇到丢失的符号,不得不一次又一次地在源代码上使用C++filt和rgrep来确定要加载什么库或头,直到我放弃。
从源代码JIT整个库的策略正确吗?还是应该链接到预先构建的库?
在头文件和库之间建立链接的一种方法是生成自动加载映射(http://cling.web.cern.ch/cling/doxygen/classcling_1_1Interpreter.html#ad56b40974d204f85e9fc0a9fa9af1660)。可以在构建时生成它,并在静态初始化期间在库中添加一个钩子。因此,用户将执行以下操作:.L myLib这反过来会触发标头包含。另一种方式则更为棘手。看看https://github.com/vgvassilev/cling/tree/master/test/Autoloading
我希望它能有所帮助。
对超迟的回复表示歉意。你应该链接一个预先构建的库!
您可以使用-l
标志将动态库加载到保鲜:
$ echo 'extern "C" const char* zlibVersion();
zlibVersion()' | cling -lz
或者交互使用.L lib
:
[cling]$ .L libz
[cling]$ #include <zlib.h>
[cling]$ zlibVersion()
(const char * const) "1.2.3.4"