Цель предупреждения --enable-auto-import
Я пытаюсь скомпилировать следующую программу:
#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
- пакет обновления 3 для Windows XP
2 ответов
Я сделал некоторое чтение, и похоже, что это может быть связано с dll mingw32, не имеющей атрибутов dllimport.
возможно, есть патч или вы можете перестроить mingw32 самостоятельно и добавить их?
я сталкивался с той же проблемой, что и вы с g++
. Я только что решил эту неприятную проблему. Вот как я прихожу к решению, шаг за шагом:
в Windows вы можете создать псевдоним g++
со всеми заданными параметрами, которые вы хотите использовать с g++
. Скажем, например, вы хотите создать псевдоним s++
of g++ -enable-auto-import
, то это cmd
as:
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
textbox окна ярлыка, я написал это:
C:\WINDOWS\System32\cmd.exe /K doskey s++=g++ -enable-auto-import $*
и так как это слишком долго (по горизонтали), один скриншот не смог захватить всю команду. Я сделал два скриншота, чтобы вы могли увидеть себя, как я это сделал:
-
левая часть команды
-
правая часть команда
дополнительные сведения о создании псевдонимов в windows см. В следующем разделе: