Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;自定义全局新建/删除覆盖系统库 我在Linux项目上覆盖C++全局新/删除操作符。这一切都在我自己的代码中很好地工作,直到我发现系统库中的新/删除符号也被我的代码替换!这是一个非常糟糕的问题,因为它远远超出了我想要的“邪恶程度”_C++_Linux_Linker_Shared Libraries - Fatal编程技术网

C++;自定义全局新建/删除覆盖系统库 我在Linux项目上覆盖C++全局新/删除操作符。这一切都在我自己的代码中很好地工作,直到我发现系统库中的新/删除符号也被我的代码替换!这是一个非常糟糕的问题,因为它远远超出了我想要的“邪恶程度”

C++;自定义全局新建/删除覆盖系统库 我在Linux项目上覆盖C++全局新/删除操作符。这一切都在我自己的代码中很好地工作,直到我发现系统库中的新/删除符号也被我的代码替换!这是一个非常糟糕的问题,因为它远远超出了我想要的“邪恶程度”,c++,linux,linker,shared-libraries,C++,Linux,Linker,Shared Libraries,所以问题是如何防止链接器/编译器替换其他(系统)共享库中的新建/删除符号?或者更确切地说,我如何控制哪些共享库将符号链接到我的库? 我希望系统库仍然使用默认的new/delete实现。特别是当可执行文件稍后使用dlopen()加载其他不在我控制下的可选动态库时 自定义全局新建/删除运算符实现构建到共享库中 我在网上到处搜索如何控制动态链接,但没有成功。我首先尝试更改测试可执行文件上的库链接顺序,但这并没有改变任何东西 我发现系统库中的新建/删除符号也被我的代码替换了 你可以阅读解释为什么会发生这

所以问题是如何防止链接器/编译器替换其他(系统)共享库中的新建/删除符号?或者更确切地说,我如何控制哪些共享库将符号链接到我的库? 我希望系统库仍然使用默认的new/delete实现。特别是当可执行文件稍后使用dlopen()加载其他不在我控制下的可选动态库时

自定义全局新建/删除运算符实现构建到共享库中

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

我发现系统库中的新建/删除符号也被我的代码替换了

你可以阅读解释为什么会发生这种情况

所以问题是如何防止链接器/编译器替换其他(系统)共享库中的新建/删除符号


通过使用
-fvisibility=hidden
构建,并显式标记要使用
\uuu属性导出的函数,您可以将
::操作符新建为
::操作符删除为库的私有属性((可见性(“默认”)
)。或者,您可以使用来实现相同的结果。

您使用了错误的自定义点。如果您真的希望在任何地方都进行此更改,则替换全局运算符非常有用。如果只想在本地化库中自定义分配,则应该使用其他机制(例如,分配器)来提供自定义点。如果大多数对象都有基类,请在那里进行。这将覆盖您正在使用的大部分内存。在需要管理STL容器内对象的情况下,您可以创建自定义STL分配器。在普通函数分配原始内存的情况下,仅在公共“根”类中重载new/delete对我没有帮助。重构大量代码以使用自定义基new/delete将是一件乏味的事情。我正在寻找LDL预加载分配器来测试它在其他C++程序上。我知道Linux。所以库和Win。DLL非常不同。但我不知道在可执行文件中解析的动态符号会像归档文件一样链接,需要在所有链接的代码中有一个定义。所以在尼克斯似乎不可能做到。。太糟糕了。还是谢谢你!我已经在使用-fvisibility=hidden来编译二进制文件并在代码中标记导出的func。可惜它在这个超市操作系统中不起作用。我将项目标记为-fvisibility=hidden,将操作符new标记为_属性(可见性(“隐藏”))。我的系统库仍然被我的操作员覆盖