【问题标题】:ld: link with std c static libraryld:与 std c 静态库的链接
【发布时间】:2017-01-17 06:29:37
【问题描述】:

我用gcc -c -nostdlib -fno-stack-protector <my code> -o <my cobj> 编译我的c 代码,我想使用std 库函数,如sprintf strcmp 等等。那么如何将我的cobj 文件与std @ 链接起来987654327@静态库?

我的Makefile链接脚本是ld -T $@.ld -o $@.o $^ -L.. -llib --no-check-sections

ps:我使用-nostdlib 选项进行编译,因为我不想要std 库的crt 部分,但我想使用与平台无关的函数,例如sprintf,strcmp,@ 987654335@,va_list

【问题讨论】:

  • 这没有意义。为什么说gcc不要链接stdlib,然后问怎么链接stdlib?
  • @Stargateur 因为我不想要 stdlib 的 crt 部分
  • 为什么不想要 c 运行时库?看起来像一个 XY 问题。
  • 您可以随时获取所需功能的源代码,并构建自己的静态库。
  • -lgcc(也可能是-lc)添加到您的链接脚本中。

标签: c gcc ld


【解决方案1】:

您可以使用 -nostartfiles -static -nostdlib -fno-stack-protector -lc 进行编译,但请注意 libc 的某些部分可能依赖于 libgcc 中的部分(__gcc_personality_v0 等),因此您很可能在链接过程中遇到错误。

您可以为这些函数提供自己的虚拟(或不那么虚拟)实现。或者您可以只使用不依赖于 libgcc 的不同 libc 实现(可能是 newlib 或 uClibc)。

This question 可能是相关的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 1970-01-01
    相关资源
    最近更新 更多