C++自定义全局新建/删除覆盖系统库
C++ custom global new/delete overriding system libraries
我正在Linux项目上覆盖C++全局new/delete运算符。它在我自己的代码中运行得很好,直到我发现系统库中的新符号/删除符号也被我的代码替换了!这是一个非常糟糕的问题,因为它远远超出了我想要的"邪恶程度"。
所以问题是如何防止链接器/编译器替换其他(系统)共享库中的新符号/删除符号?或者更确切地说,我如何控制哪些共享库链接我库中的符号?我希望系统库仍然使用它们默认的new/delete实现。特别是当可执行文件稍后使用dlopen()加载其他不在我控制范围内的可选动态库时。
自定义全局新建/删除运算符实现构建到共享库中。
我在网上到处寻找如何控制动态链接,但没有成功。我首先尝试更改测试可执行文件上的库链接顺序,但这并没有改变任何内容。
我发现系统库中的新符号/删除符号也被我的代码替换了!
你可以在这里阅读为什么会发生这种情况的解释。
所以问题是如何防止链接器/编译器替换其他(系统)共享库中的新符号/删除符号?
通过使用-fvisibility=hidden
构建并显式标记要使用__attribute__((visibility("default")))
导出的函数,可以将::operator new
和::operator delete
设为库专用。或者,您可以使用链接器版本脚本来获得相同的结果。
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 当覆盖映射中的复杂对象键时,旧对象将被删除(C++)
- 来自C#的mingw DLL:为什么我必须覆盖新建/删除?
- C++运算符删除覆盖并不总是使用
- 无法覆盖C++中纯抽象类中的运算符删除/新建
- 对运算符删除覆盖的工作方式感到困惑
- 覆盖复制/移动分配超载时,我是否需要删除当前的成员数据
- C++ 在覆盖新运算符和删除运算符时不释放数据
- C++删除或覆盖文件中的现有信息
- 从覆盖范围报告中删除自动生成的异常代码
- 使用fstream在文件中覆盖一些文本,然后删除文件的其余部分
- 忽略全局覆盖的新建/删除
- C++自定义全局新建/删除覆盖系统库
- Realloc 和全球本地新建/删除运算符覆盖
- 与覆盖全局新建和删除运算符有关的问题
- 使用参数覆盖删除
- 通用内存分配崩溃,用于覆盖C++中的新建和删除
- 覆盖删除 [] 运算符
- 覆盖删除行为