使用GCC静态链接glibc库,但动态链接其他库

16
我需要静态链接glibc到我的项目中,因为目标平台只支持非常旧的glibc(但我检查过,使用我的工具链中静态链接的glibc可行)。
不幸的是,这个应用程序必须使用pthread库,但静态链接的libpthread占用了太多空间。
我想静态链接glibc,并动态链接pthread。
运行以下命令后:
powerpc-unknown-linux-gnu-gcc object_files -lrt -lpthread -Wl,-Bstatic -lc 

我得到:

/powerpc-unknown-linux-gnu/bin/ld: cannot find -lgcc_s

-lc 之后加上 -Wl,-Bdynamic - Jonathan Leffler
哦,非常抱歉,这是我的错误。我想要静态链接glibc。 - nkdm
相关:https://dev59.com/E3RA5IYBdhLWcg3w0xnk - Ciro Santilli OurBigBook.com
2个回答

11

如果有必要,可以使用-static-libgcc


1
@nkdm,那么你需要采用R..的建议,使用uclibc。 - Anycorn
16
记录一下,libgcc不是glibc(这也是这个Stack Overflow问题标题所涉及的内容)。glibc是C标准库的GNU实现。libgcc是gcc内部的一部分,并且在gcc“需要执行某些过于复杂以至于无法发出内联代码”的情况下使用。 - Doug Richardson
为什么这个答案明显是错误的,但依然被接受了呢? - drizzt

9
你应该使用-static而不是-Wl,-static。后者绕过了gcc的知识,因此gcc仍然尝试链接共享库libgcc_s.so而不是静态库libgcc_eh.a
如果你的目的是将libc静态链接但libpthread动态链接,这根本行不通。你不能混合和匹配不同版本的libpthread;它是glibc的一部分,只是一个单独的文件,内部需要匹配。即使是相同的版本,我认为静态链接libc和动态链接libpthread也会非常错误。
如果glibc对你的需求太大了,你可以尝试使用替代的libc,如uClibcmusl

但我需要动态链接lpthread。-static选项将静态链接所有内容。 - nkdm

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