【问题标题】:Link glibc statically but some other library dynamically with GCC静态链接 glibc,但使用 GCC 动态链接其他一些库
【发布时间】:2012-10-22 15:44:13
【问题描述】:

我需要将 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

【问题讨论】:

标签: c linker glibc static-linking


【解决方案1】:

有一个-static-libgcc 如果有帮助的话

【讨论】:

  • @nkdm 那么你需要接受 R.. 对 uclibc 的建议
  • 为了记录 libgcc 不是 glibc (这就是这个 SO 问题的标题)。 glibc 是 C 标准库的 GNU 实现。 libgcc 是 gcc 内部结构的一部分,由 gcc “当它需要执行一些过于复杂而无法为其发出内联代码的操作时”使用。
【解决方案2】:

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

如果您的目标是静态链接 libc 而动态链接 libpthread,那么这根本行不通。您不能混合和匹配不同版本的 libpthread;它是 glibc 的一部分,只是一个单独的文件,内部需要匹配。即使使用相同的版本,我认为静态链接 libc 和动态链接 libpthread 会很糟糕。

如果 glibc 太大而无法满足您的需求,您可以尝试使用备用 libc,例如 uClibcmusl

【讨论】:

  • 但我需要动态链接 lpthread。 -static 选项将静态链接所有内容。
猜你喜欢
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2012-05-09
相关资源
最近更新 更多