Цель предупреждения --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 $*

и так как это слишком долго (по горизонтали), один скриншот не смог захватить всю команду. Я сделал два скриншота, чтобы вы могли увидеть себя, как я это сделал:

  • левая часть команды

    Left part of the command

  • правая часть команда

    Right part of the command

дополнительные сведения о создании псевдонимов в windows см. В следующем разделе: