在编译后添加-fvisibility = hidden

时间:2016-07-28 13:39:37

标签: linux gcc ld

我正在构建一个共享对象(.so),我将它与第三方静态库链接。在一个理想的世界中,第三方图书馆将使用-fvisibility=hidden进行编译 - 但事实并非如此。

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

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

1 个答案:

答案 0 :(得分:0)

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

LIBMYLIB_1.0 {
  global:
    libmylib_foo; libmylib_bar;

  local:
    *;
};

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

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