gpt4 book ai didi

c++ - 在 GCC 中,如何在不导出所有符号的情况下导出共享库的所有类型信息符号?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:13 26 4
gpt4 key购买 nike

问题是:

我有一个默认隐藏符号的共享库。实际上,它使用 -Xlinker --version-script= 选项导出特定文件中的一些符号,但隐藏所有其余符号。问题是,如果我们试图捕获在其他共享库中定义的异常,我们就会遇到问题,因为类型信息被这个共享库隐藏了。我无法明确地使异常类可见,因为它们是在我无法控制的开源库中定义的。我也不想在版本脚本符号文件中明确列出异常类的类型信息的损坏名称,因为有许多开发人员在这个库上工作,他们一定会忘记为 future 。

我尝试在开源 .hpp 文件之前使用 #pragma GCC visibility push(默认),但它似乎没有用 - 符号不可见。

我也尝试过使用 -fvisibility-ms-compat,它确实导出了类型信息符号,但也导出了大量我不想导出的其他符号。该库中同时包含 C 和 C++ 代码,因此我不确定它应该如何与仅适用于 C++ 的选项一起工作。

我真正需要的是一个选项,它可以使所有类型信息符号可见,同时隐藏其他符号(除非它们明确可见)。有这样的选择吗?

最佳答案

您问题的最直接答案是尝试 ld 选项 --dynamic-list-cpp-typeinfo。我在该选项上运气不佳,但 YMMV。

您不会说您在哪个平台上构建。表面上你正在使用 mingw,因为你已经尝试过 -fvisibility-ms-compat;但如果您实际上是在像 Linux 这样的 ELF 目标上,请尝试从您的版本脚本中导出符号通配符 _ZTI*_ZTN*。 (您可能可以在 Windows 上做类似的事情,但就 Visual C++ 名称修改没有真正记录而言,我不知道您可以使用任何 jar 装通配符。)

关于c++ - 在 GCC 中,如何在不导出所有符号的情况下导出共享库的所有类型信息符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com