C++ 自定义全局 new/delete 覆盖系统库

C++ custom global new/delete overriding system libraries

我正在覆盖 Linux 项目上的 C++ 全局 new/delete 运算符。在我自己的代码中一切都很好,直到我发现系统库中的 new/delete 符号也被我的代码替换了!这是一个非常糟糕的问题,因为它超出了 'level of evil' 我的预期。

所以问题是如何防止 linker/compiler 替换来自其他(系统)共享库的 new/delete 符号?或者更准确地说,我如何控制我的库中的共享库 link 符号? 我希望系统库仍然使用它们的默认 new/delete 实现。特别是当可执行文件稍后使用不受我控制的 dlopen() 加载其他可选动态库​​时。

自定义全局 new/delete 运算符实现已构建到共享库中。

我在互联网上搜索了如何控制动态 linking 但没有成功。我首先尝试更改测试可执行文件上的库 link 顺序,但这并没有改变任何东西。

I found out that the new/delete symbols in system libraries gets also replaced with my code!

您可以阅读有关发生这种情况的原因的解释

So question is how do I prevent the linker/compiler from replacing the new/delete syms from other (system) shared libraries?

您可以通过使用 -fvisibility=hidden 构建并明确标记您 想要的功能,使您的 ::operator new::operator delete 对您的图书馆私有使用 __attribute__((visibility("default"))) 导出。或者,您可以使用 linker version script 来获得相同的结果。