MinGW GCC——未定义对“atexit';
我正在尝试将一个大型项目与MinGW的GCC4.8.1链接起来,以实现x86目标。 我是这样给链接器打电话的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
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-或者换句话说-哪个库包含我缺少的内容?难道不是图书馆吗?