gcc -nostdlib是否会阻止标准库的显式附加?

问题描述 投票:2回答:2

如果我使用-nostdlib选项调用GCC链接器,是否会覆盖standardlibs的任何手动/显式appendecis?

海湾合作委员会是MinGW的4.8.1。

例:

gcc -nostdlib [MyObjectsAndLibraries] -lmsvcrt -o Outfile

由于libmsvcrt是一个标准库,它会被添加到链接过程中还是会被忽略?我找不到任何关于此的可靠数据。这就是为什么我也会感谢某种来源。

c gcc linker mingw
2个回答
5
投票

在这种情况下,“标准库”是指gcc默认隐含链接的库。在命令行中明确提到的库将始终链接。实际上,gcc上的http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Link-Options.html#Link-Options文档甚至指出,除非你真的知道你在做什么,否则在使用-lgcc时应该明确地添加-nostdlib,因为编译器可能依赖于其中定义的一些内置函数:

换句话说,当您指定-nostdlib或-nodefaultlibs时,通常也应指定-lgcc。这可确保您没有对内部GCC库子例程的未解析引用。


0
投票

由于我在Google上发现了这一点,因此请务必注明您指定内容的顺序。 @ Virgile的答案就足够了,但链接时可能会遇到链接器错误。因此,对于您的构建,它可能会有问题,因为您的exe永远不会与msvcrt或gcc链接。

这是一个规范的构建语句,扩展了@ Virgile的asnwer gcc -g0 -O2 -Wall -nostdlib -c *.o -o a.exe -lmsvcrt -lgcc

这是一个很好的参考https://stackoverflow.com/a/18389266/2262111

© www.soinside.com 2019 - 2024. All rights reserved.