2012-11-02 52 views
13

我需要将glibc静态链接到我的项目,因为目标平台只支持一个很老的(但它可以在我的工具链中静态链接glibc,我已经检查过它)静态链接glibc,但动态使用GCC动态链接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 
+0

你需要添加'轮候册,-Bdynamic'了'-lc'后。 –

+0

哦,我很抱歉,这是我的错误。我想链接glibc静态 – nkdm

+0

相关:http://stackoverflow.com/questions/809794/use-both-static-and-dynamically-linked-libraries-in-gcc –

回答

12

有一个-static-libgcc如果可以帮助

+0

谢谢,它的工作原理,但程序仍然太大。 – nkdm

+1

@nkdm那么你需要去与R ..的建议uclibc – Anycorn

+10

为了记录libgcc不是glibc(这是这个SO问题的标题是什么)。 glibc是C标准库的GNU实现。 libgcc是gcc内部的一部分,并被gcc使用,“只要它需要执行一些太复杂以至于不能发出内联代码的操作”。 –

8

您应该使用-static,不-Wl,-static。后者绕过gcc的知识,因此gcc仍然试图链接共享的libgcc_s.so而不是静态的libgcc_eh.a

如果你的目标是动态链接libc而libpthread,这根本不起作用。你不能混合和匹配不同版本的libpthread;它是glibc的一部分,只是一个单独的文件,并且内部需要匹配。即使使用相同的版本,我认为动态链接libc和libpthread也会非常糟糕。

如果glibc对于您的需求太大,您可以尝试替代libc,如uClibcmusl

+0

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