-lgcc_s和gcc之间的区别

17

使用LDFLAGS链接时,gcc_sgcc之间有什么区别?

gcc_s是静态库吗?gcc是共享库吗?

因为我在寻找一种解决方案,其中提到要链接gcc,但在我的情况下仅gcc_s有效。我想知道真正的区别。

<<hidden symbol `__name_here' in /some/library/path.a(_filename.o) is referenced by DSO
在这种情况下,通常通过在链接标志(LDFLAGS)中添加“-l gcc”或“gcc -print-libgcc-file-name”来解决问题。但是,与我的其他常规平台(i386、amd64、sparc64)不同,在这里这还不够。在经历了很多头痛后(说实话,这也来自音乐),我意识到这个标志在链接libc和最终可执行文件时都是必需的。
链接:http://people.defora.org/~khorben/200903.html

1
还有一个 libgcc_eh.a,当使用 -static 时会被使用。https://dev59.com/_Ggv5IYBdhLWcg3wNuJ5 - Ciro Santilli OurBigBook.com
1个回答

18

libgcc_s.so 是一个共享库,libgcc.a 是一个静态库。它们并不相同;可能需要同时链接两个库。libgcc_s 包含不能在进程中有多个副本的全局变量;而 libgcc 中的代码可以安全地链接多次。


嗨,谢谢。<<可能需要将两者链接起来。什么时候会出现这种必要性? - kumar
4
一些符号(例如__register_frame)只在libgcc_s中,而其他符号(例如__eprintf)则只在libgcc中。使用nm -D --defined-only libgcc_s.sonm --defined-only libgcc.a分别获取完整的列表以进行比较。 - Martin v. Löwis
5
为什么我们需要两者?它们为什么不是完全相同的,只有一个静态,另一个动态? - Ciro Santilli OurBigBook.com
我认为这是关于大小和可移植性的问题,涉及到分发方法以及代码/执行的合规性。无论删除什么都意味着更轻的文件、包、执行(可能?)以及更容易的调试/取证(根据我的过去经验推测)。 - OldFart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接