目的 - 启用自动导入警告

Kev*_*vin 8 c++ linker mingw

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

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

当我编译它时,我收到此消息:

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.
Run Code Online (Sandbox Code Playgroud)

构建成功,可执行文件按预期运行,但此警告仍然让我恼火.我希望成功的构建完全保持沉默.此消息给人的错误印象是我的代码有问题.

我可以用这个错误来解决这个错误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

Naw*_*waz 6

我曾经面临同样的问题g++.我刚刚解决了这个恼人的问题.以下是我如何逐步解决问题的方法:

在Windows上,您可以创建包含g++要使用的所有给定选项的别名g++.说,例如,你想创建一个别名s++g++ -enable-auto-import,那么你在运行此cmd为:

C:\>doskey s++=g++ -enable-auto-import
Run Code Online (Sandbox Code Playgroud)

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

C:\>s++ filename.cpp //it is not working
Run Code Online (Sandbox Code Playgroud)

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

C:\>doskey s++=g++ -enable-auto-import $*
Run Code Online (Sandbox Code Playgroud)

请注意$*右侧,表示现在s++可以采用命令行参数:

C:\>s++ filename.cpp //yayyyy..its working now, without giving any warnings!
Run Code Online (Sandbox Code Playgroud)

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

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

C:\WINDOWS\System32\cmd.exe /K doskey s++=g++ -enable-auto-import $*
Run Code Online (Sandbox Code Playgroud)

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

  • 左边的命令部分

    左边的命令部分

  • 命令的右侧部分

    命令的右侧部分

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


Poo*_*hat 4

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

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