2011-10-12 25 views
8

Tôi cố gắng để biên dịch chương trình sau đây:Mục đích của Cảnh báo enable-auto-nhập khẩu

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

Khi tôi biên dịch nó, tôi nhận được tin nhắn này:

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. 

Việc xây dựng thành công và thực thi chạy như mong đợi, nhưng cảnh báo này vẫn làm tôi khó chịu. Tôi hy vọng một công trình thành công sẽ hoàn toàn im lặng. Thông báo này cung cấp cho ấn tượng sai rằng có điều gì đó sai với mã của tôi.

Tôi có thể tắt tiếng lỗi này với g++ -Xlinker --enable-auto-import test.cpp, nhưng điều này là không mong muốn vì nó tăng gấp ba số ký tự tôi cần nhập để biên dịch chương trình.

Câu hỏi:

  • Tại sao cảnh báo này xuất hiện cho đơn giản nhất của chương trình? tôi không mong đợi những cảnh báo khó hiểu khi tôi biên dịch Hello World.
  • Có thể tắt tiếng cảnh báo này mà không chuyển cờ cho người liên kết mỗi lần không? Một tùy chọn trong tệp cấu hình ẩn ở đâu đó trong c:\mingw, có lẽ? Hoặc có thể tôi đã bỏ lỡ hộp kiểm "tự động bật tự động nhập" trong khi cài đặt?

Specs Có thể liên quan

  • GCC Version 4.5.0
  • ld.exe Version 2.20.51.20100613
  • Windows XP Service Pack 3
+0

sử dụng một Makefile. –

Trả lời

4

tôi đã làm một số đọc và có vẻ như nó có thể liên quan đến dll mingw32 không có thuộc tính dllimport được xác định.

Có thể có bản vá hoặc bạn có thể tự xây dựng lại mingw32 và thêm chúng?

+1

Tôi đã tự làm một số nghiên cứu và tôi đồng ý với bạn. [Ở đây] (http://sourceware.org/ml/binutils/2009-02/msg00341.html) là một cuộc thảo luận từ nhóm tin binutils về lý do tại sao lỗi xuất hiện (tôi nghĩ là nó quá kỹ thuật đối với tôi). [This] (http://sourceware.org/ml/binutils-cvs/2009-06/msg00121.html) dường như là thay đổi nơi chúng vá nó sao cho '--enable-auto-import' được truyền tự động. Tôi không chắc liệu tôi có đang sử dụng trình liên kết 2 năm tuổi hay không, nhưng tôi đã cài đặt lại MinGW và cảnh báo đã biến mất. – Kevin

6

Tôi đã từng gặp phải sự cố tương tự như khi bạn thực hiện với g++. Tôi đã giải quyết vấn đề khó chịu này vừa nãy. Đây là cách tôi đến giải pháp, từng bước:

Trên Windows, bạn có thể tạo bí danh g++ với tất cả các tùy chọn đã cho mà bạn muốn sử dụng với g++. Nói, ví dụ, bạn muốn tạo một bí danh s++ của g++ -enable-auto-import, sau đó bạn chạy trên cmd như:

C:\>doskey s++=g++ -enable-auto-import 

Điều này tạo ra một bí danh gọi s++.Nhưng bí danh này sẽ không mất bất kỳ đối số dòng lệnh, có nghĩa là, bạn không thể viết này:

C:\>s++ filename.cpp //it is not working 

Để làm cho nó làm việc, nếu bạn đã nói với các bí danh để chấp nhận đối số dòng lệnh trong khi tạo ra nó, vì vậy đây là làm thế nào nó được thực hiện:

C:\>doskey s++=g++ -enable-auto-import $* 

Xin lưu ý $* ở bên phải, mà chỉ ra rằng tại s++ có thể mất đối số dòng lệnh:

C:\>s++ filename.cpp //yayyyy..its working now, without giving any warnings! 

Nhưng bạn có thể không thích tạo bí danh mỗi khi bạn mở cmd. Trong trường hợp đó, bạn có thể tạo lối tắt là cmd.

Ví dụ, tôi tạo ra một shortcut gọi Console và trong Target textbox của cửa sổ tắt, tôi đã viết này:

C:\WINDOWS\System32\cmd.exe /K doskey s++=g++ -enable-auto-import $* 

Và vì đây là quá dài (theo chiều ngang), một ảnh chụp màn hình đã không thể nắm bắt được toàn bộ lệnh. Tôi mất hai ảnh chụp màn hình để bạn có thể nhìn thấy mình làm thế nào tôi đã làm nó:

  • phần còn lại của lệnh

    Left part of the command

  • phần phải của lệnh

    Right part of the command

Để biết thêm thông tin ormation vào việc tạo ra các bí danh trên cửa sổ, thấy điều này:

+0

Một số hệ thống xây dựng không bắt đầu quá trình thông qua trình bao. –

Các vấn đề liên quan