3

If I call the GCC Linker with the option -nostdlib does this override any manual/explicit appendecis of standardlibs?

GCC is 4.8.1 from MinGW.

Example:

gcc -nostdlib [MyObjectsAndLibraries] -lmsvcrt -o Outfile

Since libmsvcrt is a standard library, will it be added to the link process or will it be ignored? I can't find any reliable data on this., this is why I would also appreciate some kind of source to this.

4

2 回答 2

6

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

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

于 2013-11-06T16:14:58.527 回答
1

自从我在谷歌上找到了这个,

@Virgile 的答案就足够了,但是当您使用您提供的命令样式链接时,您可能会遇到链接器错误。程序构建有两个步骤:编译和链接。您可以使用 GCC 来同时做一个或另一个或两者。

重要的是要注意您指定事物的顺序。在您的构建中,它可能会出现问题,因为您的 exe 永远不会与 msvcrt 或 gcc 链接。包括两个可能具有相同符号的库也非常糟糕。

这是规范的构建和链接语句

gcc -g0 -O2 -Wall -nostdlib -c *.c
gcc -g0 -O2 -Wall -nostdlib -o a.exe *.o -lmsvcrt -lgcc

gcc -g0 -O2 -Wall -nostdlib -o a.exe *.c -lmsvcrt -lgcc

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

于 2017-12-18T22:57:24.937 回答