【问题标题】:MinGW GCC - undefined reference to `atexit'MinGW GCC - 对“atexit”的未定义引用
【发布时间】:2013-11-06 13:41:31
【问题描述】:

我正在尝试将一个大型项目与来自 MinGW 的 GCC 4.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 提供的正确库。 有什么办法可以解决这个错误吗?

【问题讨论】:

  • 您在没有标准 c 库的情况下进行链接。尝试摆脱 -nostdlib。

标签: c gcc linker mingw atexit


【解决方案1】:

您正在与-nostdlib 链接,而atexit() 是来自stdlib.h 的函数。

根据GCC Link Options

-nostdlib

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

【讨论】:

  • 但正如对这个问题的回答中所述stackoverflow.com/questions/6394512/standard-c-library-in-mingwMinGW GCC 不针对 libc 构建,而是针对 libmsvcrt 构建,它包含在我传递给链接器的库中。但即使没有,MinGW 也不提供 libc。
  • 好的,为了它,我摆脱了-nostdlib 并且它有效 - 但有人可以解释为什么它有效吗? (对不起,如果这是一个愚蠢的问题,但我是认真的!)
  • @Toby 您引用的答案说 MinGW 不是针对 glibc 构建的,它是 libc 的 GNU 版本。它们不是一回事。
  • 在 MinGW libmsvcrt 一个标准库,所以 -nostdlib 删除它。
  • @Yu Hao - 好的,但仍然没有 libc - 或者换句话说 - 哪个 lib 包含我所缺少的内容?不应该是 libmsvcrt 吗?
【解决方案2】:

库按照命令行中使用的顺序进行检查,因此请使用-lgcc -lmsvcrt

【讨论】:

    猜你喜欢
    • 2013-08-30
    • 2014-02-04
    • 2013-11-20
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2020-02-07
    • 1970-01-01
    相关资源
    最近更新 更多