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

工具链ABI标识符 我在C++中创建了一个插件接口,它依赖于每个模块上的抽象基类和C链接工厂,如下所示:,c++,plugins,abi,C++,Plugins,Abi,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 ) { retur

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检索和识别?

谢谢