【问题标题】:Purpose of --enable-auto-import Warning--enable-auto-import 警告的目的
【发布时间】:2011-10-12 15:15:24
【问题描述】:

我正在尝试编译以下程序:

#include <iostream>
int main(){
    std::cout << "Hello, world!";
    return 0;
}

当我编译它时,我得到这个消息:

C:\programs>g++ test.cpp
Info: resolving std::cout  by linking to __imp___ZSt4cout (auto-import)
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: a
uto-importing has been activated without --enable-auto-import specified on the c
ommand line.
This should work unless it involves constant data structures referencing symbols
 from auto-imported DLLs.

构建成功并且可执行文件按预期运行,但是这个警告仍然让我很恼火。我希望一个成功的构建完全沉默。此消息给人一种错误的印象,即我的代码有问题。

我可以使用g++ -Xlinker --enable-auto-import test.cpp 消除此错误,但这是不可取的,因为它使我需要键入的字符数增加了三倍以编译程序。

问题:

  • 为什么最简单的程序会出现此警告?当我编译 Hello World 时,我不希望出现神秘的警告。
  • 是否可以在不每次都将标志传递给链接器的情况下消除此警告?隐藏在c:\mingw 某处的配置文件中的一个选项,也许?或者我在安装过程中错过了“自动启用自动导入”复选框?

可能相关的规格

  • GCC 版本 4.5.0
  • ld.exe 版本 2.20.51.20100613
  • Windows XP Service Pack 3

【问题讨论】:

    标签: c++ linker mingw


    【解决方案1】:

    我曾经面临与g++ 相同的问题。我刚刚解决了这个恼人的问题。以下是我如何一步一步地找到解决方案:

    在 Windows 上,您可以创建一个别名 g++,其中包含您想与 g++ 一起使用的所有给定选项。比如说,你想创建一个别名 s++g++ -enable-auto-import,然后在 cmd 上运行:

    C:\>doskey s++=g++ -enable-auto-import
    

    这会创建一个名为 s++ 的别名。但是这个别名不会接受任何命令行参数,这意味着你不能这样写:

    C:\>s++ filename.cpp //it is not working
    

    为了使它工作,如果你必须告诉别名在创建它时接受命令行参数,那么它是如何完成的:

    C:\>doskey s++=g++ -enable-auto-import $*
    

    请注意右边的$*,表示现在s++可以带命令行参数了:

    C:\>s++ filename.cpp //yayyyy..its working now, without giving any warnings!
    

    但您可能不希望每次打开 cmd 时都创建别名。在这种情况下,您可以创建cmd 的快捷方式。

    例如,我创建了一个名为Console 的快捷方式,在快捷方式窗口的Target 文本框中,我这样写:

    C:\WINDOWS\System32\cmd.exe /K doskey s++=g++ -enable-auto-import $*
    

    由于这太长(水平),一个屏幕截图无法捕获整个命令。我截了两张截图,让你看看我是怎么做到的:

    • 命令的左边部分

    • 命令的右侧部分

    有关在 Windows 上创建别名的更多信息,请参阅:

    【讨论】:

    • 一些构建系统不通过 shell 启动进程。
    【解决方案2】:

    我做了一些阅读,看起来它可能与未定义 dllimport 属性的 mingw32 dll 有关。

    也许有补丁或者你可以自己重建mingw32并添加它们?

    【讨论】:

    • 我自己做了一些研究,我同意你的看法。 Here 是来自 binutils 新闻组的关于错误出现原因的讨论(我认为 - 这对我来说太技术性了)。 This 似乎是他们修补它的更改日志,以便自动传递--enable-auto-import。我不确定我是否使用了 2 年前的链接器,但我重新安装了 MinGW,警告消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2021-07-11
    • 2023-04-04
    • 2014-01-02
    相关资源
    最近更新 更多