Назначение --enable-auto-import Предупреждение - PullRequest
8 голосов
/ 12 октября 2011

Я пытаюсь скомпилировать следующую программу:

#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

Ответы [ 2 ]

6 голосов
/ 12 октября 2011

Раньше я сталкивался с той же проблемой, что и вы с 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 $*

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

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

    Left part of the command

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

    Right part of the command

Для получения дополнительной информации о создании псевдонимов в окнах см .:

4 голосов
/ 12 октября 2011

Я кое-что прочитал, и похоже, что это может быть связано с тем, что в dll mingw32 не определены атрибуты dllimport.

Возможно, есть патч или вы можете пересобрать mingw32 самостоятельно и добавить их?

...