ld:与std c静态库的链接

ld:与std c静态库的链接,c,gcc,ld,C,Gcc,Ld,我用gcc-c-nostdlib-fno stack protector-o编译我的c代码,我想使用std库函数,比如sprintfstrcmp等等。那么如何将我的cobj文件链接到stdc静态库呢 我的Makefile链接脚本是ld-T$@.ld-o$@.o$^-L-llib——无检查部分 ps:我使用-nostlib选项编译,因为我不想要std库的crt部分,但我想使用平台无关的函数,如sprintf,strcmp,random,va_list等等您可以使用-nostartfiles-sta

我用
gcc-c-nostdlib-fno stack protector-o
编译我的c代码,我想使用
std
库函数,比如
sprintf
strcmp
等等。那么如何将我的
cobj
文件链接到
std
c
静态库呢

我的
Makefile
链接脚本是
ld-T$@.ld-o$@.o$^-L-llib——无检查部分


ps:我使用
-nostlib
选项编译,因为我不想要
std
库的
crt
部分,但我想使用平台无关的函数,如
sprintf
strcmp
random
va_list
等等

您可以使用
-nostartfiles-static-nostlib-fno stack protector-lc
进行编译,但请注意,libc的某些部分可能依赖于libgcc的片段(
\ugcc_personality\u v0
等),因此在链接过程中很可能会出错

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


可能相关。

这没有意义。为什么对gcc说不要链接stdlib,然后问如何链接stdlib?@Stargateur因为我不想要stdlib的
crt
部分为什么你不想要c运行时库?似乎是XY问题。您可以随时获取所需函数的源代码,并构建自己的静态库。将
-lgcc
(也可能是
-lc
)添加到链接脚本中。