MinGW GCC——未定义对“atexit';

MinGW GCC——未定义对“atexit';,c,gcc,linker,mingw,atexit,C,Gcc,Linker,Mingw,Atexit,我正在尝试将一个大型项目与MinGW的GCC4.8.1链接起来,以实现x86目标。 我是这样给链接器打电话的 D:\MyGCCPath\gcc -L [LIBPATHS] -nostdlib -Wl,-Map,D:\PathToMapFile.map,--emit-relocs [OBJECTFILES AND LIBS] -lmsvcrt -lgcc -o D:\PathToMyOutputFile 通过此呼叫,我得到此链接器错误: libgcc.a(__main.o):(.text+0x

我正在尝试将一个大型项目与MinGW的GCC4.8.1链接起来,以实现x86目标。 我是这样给链接器打电话的

D:\MyGCCPath\gcc -L [LIBPATHS]  -nostdlib -Wl,-Map,D:\PathToMapFile.map,--emit-relocs [OBJECTFILES AND LIBS] -lmsvcrt -lgcc -o D:\PathToMyOutputFile
通过此呼叫,我得到此链接器错误:

libgcc.a(__main.o):(.text+0x5a): undefined reference to `atexit'
我尝试了不同的
msvcr
版本(100和90),但这更像是一次绝望的尝试,因为我对这个问题不太熟悉。我正在使用MinGW提供的正确库。
有什么方法可以修复此错误吗?

您正在链接
-nostdlib
,而
atexit()
stdlib.h
中的一个函数

根据:

-nostlib

链接时不要使用标准系统启动文件或库。没有启动文件,只有您指定的库被传递到链接器,并且指定系统库链接的选项(如
-static libgcc
-shared libgcc
)被忽略


您正在链接
-nostlib
,而
atexit()
stdlib.h
中的一个函数

根据:

-nostlib

链接时不要使用标准系统启动文件或库。没有启动文件,只有您指定的库被传递到链接器,并且指定系统库链接的选项(如
-static libgcc
-shared libgcc
)被忽略


库是按命令行上使用的顺序进行检查的,因此使用
-lgcc-lmsvcrt

库是按命令行上使用的顺序进行检查的,因此使用
-lgcc-lmsvcrt

您在没有标准c库的情况下链接。试着去掉-nostlib。你在没有标准c库的情况下链接。试着去掉-nostlib。但是正如在这个问题的答案中所说的,MinGW GCC不是针对libc构建的,而是针对libmsvcrt构建的,libmsvcrt包含在我传递给链接器的库中。但即使没有,MinGW也不提供libc。好吧,为了它,我去掉了
-nostlib
,它可以工作-但是有人能解释一下为什么它可以工作吗?(如果这是一个愚蠢的问题,请原谅,但我是认真的!)托比你引用的答案说,MinGW不是针对glibc构建的,glibc是libc的GNU版本。它们不是一回事。在MinGW上,
libmsvcrt
是一个标准库,所以
-nostlib
将其删除。@Yu Hao-好的,但仍然没有libc-或者换句话说-哪个库包含我缺少的内容?它不应该是libmsvcrt吗?但是正如在对这个问题的回答中所说的,MinGW GCC不是针对libc构建的,而是针对libmsvcrt构建的,libmsvcrt包含在我传递给链接器的库中。但即使没有,MinGW也不提供libc。好吧,为了它,我去掉了
-nostlib
,它可以工作-但是有人能解释一下为什么它可以工作吗?(如果这是一个愚蠢的问题,请原谅,但我是认真的!)托比你引用的答案说,MinGW不是针对glibc构建的,glibc是libc的GNU版本。它们不是一回事。在MinGW上,
libmsvcrt
是一个标准库,所以
-nostlib
将其删除。@Yu Hao-好的,但仍然没有libc-或者换句话说-哪个库包含我缺少的内容?难道不是图书馆吗?