工具链ABI标识符

时间:2014-04-11 15:24:59

标签: c++ plugins abi

我在C ++中创建了一个插件接口,它依赖于每个模块上的抽象基类和C-linkage工厂,如下所示:

plugin.h:

class Plugin
{
    public:
        virtual uint8_t some_number ( void ) = 0;
};

plugin1.cpp:

class plugin1
{
    public:
        uint8_t some_number ( void ) override;
};

extern "C" Plugin *
    new_plugin
    ( void )
    {
        return new plugin1;
    }

考虑到没有标准的ABI,我想检查一个插件是否与应用程序兼容。为此,使用两个8位整数来标识接口版本。但是,这只能解决添加或删除方法的问题;它没有处理使用遵循不同约定的工具链构建应用程序和插件的情况。

是否有任何方法来编码ABI的标识符(即在编译时定义的以NULL结尾的字符数组)?像这样:

/* defined by the compiler */
#define ABI "gnu-X.Y"

/* and then, in each plugin */
const char * plugin_abi = ABI;

由于我还没有找到任何东西,我认为没有标准的方法可以做到,而且我必须从构建系统处理它。 无论如何,是否有任何方法可以对工具链ABI进行编码,以便以后通过dlsym进行检索和识别?

谢谢!

0 个答案:

没有答案