我完全是新手dlsym
,我刚刚复习了C++ dlopen mini HOWTO 。所以,如果我的概念和方法有误,请纠正我:
我打算编写一个以shared library
名称为参数的应用程序:
./my_app libXYZ.so
不同的输入库使用它们自己的namespaces
来声明恰好具有相似签名的函数:
libXXX.so:
namespace X {
namespace Y {
namespace Z{
ret_t func(arg_r);
}}}
libABC.so:
namespace A {
namespace B {
namespace C{
ret_t func(arg_r);
}}}
- 如您所见,函数签名是相同的。
- 需要说明的是,虽然库是 C++ 中的,但我只是在谈论调用
C functions
库中的一些方法,而不是 C++ 成员方法。 - 同样
my_app
应该能够在func()
没有任何其他参数提示的情况下调用。
自然,每个库都包含一个不同的错位 C++ 符号,我无法创建extern "C"
适用于所有人的单个子句(例如):
- $^%X^&Y&^&Zfunc&^arg*&*
- $#$A#$B&^&C&^func*& arg^& ^&
我想到的唯一方法是获取库符号列表,搜索func
子字符串(这很讨厌且容易出错)并extern "C"
使用宏制定子句。你能建议一个更好的解决方案吗?