2010-07-05 72 views
4

我想限制使用gcc的fvisibility功能共享库的ABI。不过,我很困惑什么是正确的做法。在编译时或链接时gcc的fvisibility

我的makefile分两个阶段组织生成过程。在第一步中,所有的.cpp文件都使用一些gcc选项构建为对象文件。然后使用另一组gcc和ld选项将所有目标文件链接在一起。从我看过的幻视与第二步有关。然而这与我观察到的结果矛盾。如果我在编译时选项中添加fvisibility = hidden,结果如预期的那样,nm -D报告一小部分导出符号。相反,如果我将它添加到链接时间选项,它似乎不会影响构建。

在寻找解释时,我比较了使用和不使用fvisibility生成的对象文件。差异似乎在对象文件中的符号地址中。但是我不知道地址上的差异是如何将消息传递给链接器的,以便它能够隐藏其中一个案例中的符号并将它们暴露给另一个案例。

任何人都可以请解释给我。感谢您的时间。

回答

0

您可能会感兴趣http://gcc.gnu.org/wiki/Visibility有帮助

+1

我知道了。我已经重新阅读,仍然无法回答我的问题。目标文件(* .o)应该可以用于静态库和共享库。然而,这似乎并非如此。 – 2010-07-06 11:13:37