linux - 编译后添加 -fvisibility=hidden

标签 linux gcc ld

我正在构建一个共享对象 (.so),并将其链接到第三方静态库。在理想情况下,该第三方库应该使用 -fvisibility=hidden 进行编译 - 但事实并非如此。

有没有办法避免在动态库导出的全局符号中包含该静态库定义的符号?

(如果重要的话,我在linux平台上使用gcc)

最佳答案

您可以控制通过 -Wl,--version-script=<version-script> 导出的符号.版本脚本看起来像

LIBMYLIB_1.0 {
  global:
    libmylib_foo; libmylib_bar;

  local:
    *;
};

(库符号将在 local 部分过滤)。

请注意,您仍应尽可能使用隐藏可见性(即使您启用了版本脚本),因为它允许编译器更好地优化。

关于linux - 编译后添加 -fvisibility=hidden,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38638179/

相关文章:

ruby-on-rails - rails 命令问题

c - 声明与定义不同的函数没有 GCC 警告

c - 跳转到标签时出现段错误

ios - 为动态链接提供后备符号

macos - 什么是链接的向上依赖?

python - Windows 与 Linux 文本文件读取

linux - CHMOD 与 UMASK - Linux 文件权限

python - 如何使用python动态地将方法导出到dbus,而不需要静态装饰器?

gcc - 如何更改 MinGW 的规范文件以链接 MSVCR100.dll 和 MSVCP100.dll?

assembly - ld with -Ttext=0x1000 使文件非常大