Way*_*yne 2 linux shared-libraries
我在Linux中有两个共享库,它们在构建时在所有方面都是相同的,除了每个公开的一个函数具有不同的接口(一个接受一些第三方数组类型而另一个接受字符串).我可以构建两个共享库版本,我想知道是否有一种方法可以将元信息插入共享库本身(就像你能够在构建时将注释/公司名称/等插入到DLL中一样) ,然后可以在运行时查询).
我不想以两种不同的方式命名.so文件,因为它们实际上是相同的,它们是更大系统的可互换部分.我需要我的代码在库上执行dlopen和dlsym以了解它的风格,以便它具有正确的接口.
我目前正在实现这一目标的方法是在一个中添加一个名为"Flavor_A"的无操作函数,在另一个中添加"Flavor_B".然后,我将Flavor_A或Flavor_B用于验证我正在处理的共享库.如果我得到一个NULL,我知道Flavor_X不存在,在这种情况下它必须是另一种味道.
我认为必须有更好的方法.所以,这就是我在这里的原因.
任何人都有关于如何在.so二进制文件中构建一些运行时可查询信息的建议?
谢谢.
我不建议使用两个不同的符号,而是建议使用一个始终存在的符号并返回正确的信息.
FLAVOR getFlavor()
{
#ifdef FLAVOR_A
return Flavor_A;
#else
return Flavor_B;
#endif
}
Run Code Online (Sandbox Code Playgroud)
您也可以直接导出具有正确风味的变量;
extern FLAVOR flavor =
#ifdef FLAVOR_A
Flavor_A;
#else
Flavor_B;
#endif
Run Code Online (Sandbox Code Playgroud)
对于后者,您可以像这样访问变量:
*(FLAVOR *)dlsym(lib, "flavor")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |