用静态库导出满足外部符号
Satisfy external symbols with static library exports
我正在尝试挂钩 GCC 的 __cxa_throw,这样我就能够接收异常回溯,而不会弄乱异常对象本身。虽然它适用于可执行文件,但不适用于共享对象。
我正在构建包含 hook 本身的微型静态库,并将其重定向到我在单独的 SO 中的函数。我的 __cxa_throw 在 .text 部分中作为导出符号很好地显示。虽然它没有帮助,即使使用 LD 的 -Bsymbolix,-Bsymbolic-functions。
那么问题来了。我可以强制 LD 找到我现有的 __cxa_throw 实现并用它满足外部符号吗?
谢谢
首先,你的钩子函数必须被编译到目标文件中,并作为目标文件链接到生成的 SO 中。似乎来自目标文件的符号甚至比像 libstd 这样的默认导入具有更高的优先级。这应该已经满足整个 SO 中的所有符号引用,包括正在链接的档案。
其次,如果你想让你的钩子不被外界看到,只需使用__attribute__((visibility("hidden")))
我正在尝试挂钩 GCC 的 __cxa_throw,这样我就能够接收异常回溯,而不会弄乱异常对象本身。虽然它适用于可执行文件,但不适用于共享对象。
我正在构建包含 hook 本身的微型静态库,并将其重定向到我在单独的 SO 中的函数。我的 __cxa_throw 在 .text 部分中作为导出符号很好地显示。虽然它没有帮助,即使使用 LD 的 -Bsymbolix,-Bsymbolic-functions。
那么问题来了。我可以强制 LD 找到我现有的 __cxa_throw 实现并用它满足外部符号吗?
谢谢
首先,你的钩子函数必须被编译到目标文件中,并作为目标文件链接到生成的 SO 中。似乎来自目标文件的符号甚至比像 libstd 这样的默认导入具有更高的优先级。这应该已经满足整个 SO 中的所有符号引用,包括正在链接的档案。
其次,如果你想让你的钩子不被外界看到,只需使用__attribute__((visibility("hidden")))