调用弱函数符号和强函数符号?
Calling both weak and strong function symbol?
我有一个提供函数func()的库:
return_type func(type arg);
有必要在我的应用程序中通过我自己的实现来覆盖它。这是可能的,因为库提供了一个弱符号 func,而我的应用程序中的 func 符号是一个强符号。(这是我的理解。
现在我希望能够调用 func 的两个实现 - 库的实现和我自己的实现:
// The problem is that the names are the same.
func(); // Everything is OK, calling my implementation (in my application)
func(); // How can I call library's implementation now?
我可以调用我的实现,因为它覆盖了库中的实现。但是如何在库中调用实现呢?我该如何参考它?
如果函数位于共享库中,则可以使用dlopen
加载它们并从dlsym
获取符号。然后,您可以为每个库中的函数使用不同的函数指针。
如果函数位于静态库中,则需要修改静态库以更改名称。这可以通过类似的东西来完成objcopy --prefix-symbols=foo_ foo.o
.不确定在这种情况下是否可以直接在.a
上执行此操作,您可能需要扩展存档。
添加前缀后,您需要修改任何头文件以使用宏或类似内容采用新名称。
相关文章:
- 用符号版本替换对函数的所有调用
- C++模板函数,用于比较任何无符号整数和有符号整数
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 为函数定义符号不明确的指针参数
- 在函数中返回无符号字符数组,但不返回指针
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 仅在 MacOS 上析构函数的未定义符号
- clang:使用 O3 导出隐式实例化函数的符号
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 在函数内初始化无符号字符指针将返回空指针
- 如何识别符号表中的符号是我'application'函数
- dll导出函数的函数符号来自静态链接库
- 调用弱函数符号和强函数符号?
- Glew - 与 GLFW 配对时 gl- 函数符号上出现链接错误
- 链接错误:找不到__thiscall函数符号,但定义了__cdecl函数符号
- 如何从通用函数符号计算或指定COFF符号表的"value"?
- 链接两个具有相同函数签名的强函数符号的结果使用 G++ 以及原因
- 在抽象类中使用shared_ptr时,如何在nm或objdump中找到函数符号
- 类析构函数符号出了什么问题?在vc++中