2011-11-07 38 views
32

Tôi đang cố gắng thực hiện một số công cụ thực sự đơn giản trong C++, nhưng tôi không thể tìm thấy bất kỳ thông tin nào về cách giải quyết vấn đề này. Ngay cả cuốn sách tôi vừa nói "Chỉ cần biên dịch và chạy chương trình".Ký hiệu không xác định cho kiến ​​trúc x86_64: Tôi nên sử dụng kiến ​​trúc nào?

test.cpp

#include <iostream> 
using namespace std; 

int main() 
{ 
    cout << "Never fear, C++ is here!"; 
    return 0; 
} 

Trình biên dịch nói:

Undefined symbols for architecture x86_64: 
    "std::cout", referenced from: 
     _main in ccVfJHGs.o 
    "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from: 
     _main in ccVfJHGs.o 
    "std::ios_base::Init::Init()", referenced from: 
     __static_initialization_and_destruction_0(int, int)in ccVfJHGs.o 
    "std::ios_base::Init::~Init()", referenced from: 
     ___tcf_0 in ccVfJHGs.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

tôi đã cố gắng biên soạn với cờ như -arch i386-m32 nhưng nó luôn luôn nói đó là kiến ​​trúc sai. Tôi nên sử dụng cái nào?

Tôi đang thực hiện việc này trên máy Mac nhưng không sử dụng XCode, chỉ cần gcc.

+0

Bạn sử dụng gcc nào? Macports? XCode? Có vẻ như con đường của bạn bị rối tung lên. – FFox

Trả lời

61

Lỗi không phải là kiến ​​trúc sai, đó là std::cout (và các biểu tượng khác) không được xác định.

Bạn nên biên dịch và liên kết với g++ không gcc, để tự động liên kết với các thư viện C++ chính xác.

+1

Ồ, cảm ơn! Tại sao gcc không hoạt động đối với tôi? Mỗi ví dụ tôi thấy là sử dụng gcc, nó là một điều os x? – oskob

+2

@oskob Không, đơn giản là vì gcc là trình biên dịch C (mặc dù nó xử lý cú pháp C++), và g ++ là trình biên dịch C++. –

+0

Không phải gcc là giao diện người dùng sẽ ủy quyền cho g ++ khi nó gặp phải tệp .cc/.cpp? – RobH

5

Lỗi xảy ra do bạn đang biên dịch với gcc, chỉ liên kết mặc định libc. Bạn cần biên dịch với g++ để libstdc++ cũng được liên kết tự động.

0

Sử dụng g ++ thay vì gcc để liên kết với các thư viện chính xác C++

+0

Đây là nhận xét chứ không phải là câu trả lời. Hãy lấy đại diện để đăng nó như vậy. –

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