我正在尝试编译以下程序:
#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
来解决这个错误,但这是不可取的,因为它需要输入的字符数增加三倍才能编译程序。
问题:
c:\mingw
的某个地方?或者我可能在安装过程中错过了“自动启用自动导入”复选框?可能相关规格
答案 0 :(得分:6)
我曾经面临与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上创建别名的更多信息,请参阅:
答案 1 :(得分:4)
我做了一些阅读,看起来它可能与mingw32 dll没有定义dllimport属性有关。
也许有补丁或你可以自己重建mingw32并添加它们?