使用静态库导出满足外部符号

时间:2016-01-18 14:42:01

标签: c++ gcc ld

我试图挂钩GCC的__cxa_throw,以便我能够接收异常回溯而不会使异常对象本身混乱。虽然它与可执行文件一起运行良好,但它不能与共享对象一起使用。

我构建了一个包含钩子本身的小型静态库,并将其重定向到我的函数中。我的__cxa_throw很好地作为.text段中的导出符号出现。虽然它没有帮助,即使是LD的-Bsymbolix,-Bsymbolic-functions。

所以问题是。我可以强制LD找到我现有的__cxa_throw实现并用它来满足外部符号吗?

由于

1 个答案:

答案 0 :(得分:0)

首先,您的钩子函数必须编译到目标文件中并链接到生成的SO作为目标文件。似乎来自目标文件的符号具有比libstd等默认导入更高的优先级。这应该已经满足整个SO内的所有符号引用,包括链接的档案。

其次,如果您希望从外部世界看不到您的钩子,请使用__attribute__((visibility("hidden")))