--enable-auto-import 警告的目的

Purpose of --enable-auto-import Warning

提问人:Kevin 提问时间:10/12/2011 更新时间:10/20/2011 访问量:6112

问:

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

#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 服务包 3
C++ 链接器 mingw

评论


答:

4赞 Poodlehat 10/12/2011 #1

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

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

评论

1赞 Kevin 10/14/2011
我自己做了一些研究,我同意你的看法。这是 binutils 新闻组关于为什么会出现错误的讨论(我认为 - 这对我来说太技术性了)。这似乎是他们修补它的更改日志,以便自动传递。我不确定我是否使用了 2 年前的链接器,但我重新安装了 MinGW,警告消失了。--enable-auto-import
6赞 Nawaz 10/13/2011 #2

我曾经面临和你一样的问题。我刚才解决了这个烦人的问题。以下是我如何逐步找到解决方案:g++

在 Windows 上,您可以创建一个别名,其中包含要与 一起使用的所有给定选项。例如,假设您要创建一个别名 ,然后按以下方式运行它:g++g++s++g++ -enable-auto-importcmd

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!

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

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

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

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

  • 命令的左侧部分

    Left part of the command

  • 命令的右侧部分

    Right part of the command

有关在 Windows 上创建别名的详细信息,请参阅以下内容:

评论

0赞 Johan Boulé 5/8/2016
某些构建系统不会通过 shell 启动进程。