【发布时间】:2012-02-06 05:36:42
【问题描述】:
问题来了:
我有一个默认隐藏符号的共享库。实际上,它使用 -Xlinker --version-script= 选项来导出特定文件中的一些符号,但隐藏所有其他符号。问题是,如果我们试图捕获在其他共享库中定义的异常,我们会遇到问题,因为 typeinfo 被这个共享库隐藏了。我不能明确地使异常类可见,因为它们是在我无法控制的开源库中定义的。我也不想在版本脚本符号文件中显式列出异常类的类型信息的错位名称,因为有许多开发人员正在研究这个库,他们一定会忘记为某些异常类执行此操作未来。
我尝试在开源 .hpp 文件之前使用 #pragma GCC 可见性推送(默认),但它似乎不起作用 - 符号不可见。
我也尝试过使用 -fvisibility-ms-compat,它确实导出了 typeinfo 符号,但也导出了大量我不想导出的其他符号。该库中同时包含 C 和 C++ 代码,因此我不确定它应该如何使用仅适用于 C++ 的选项。
我真正需要的是一个选项,它可以使所有 typeinfo 符号可见,同时隐藏其他符号(除非它们明确可见)。有这样的选择吗?
【问题讨论】:
-
也许通过处理
nm或类似的输出动态生成链接器脚本?只是猜测。 -
这可能是个不错的选择。我已经考虑过了,虽然我不喜欢额外的脚本工作,但它可能是最好的答案。感谢您的建议!
标签: c++ gcc linker visibility typeinfo