2011-11-07 11 views
32

Próbuję zrobić naprawdę proste rzeczy w C++, ale nie mogę znaleźć żadnych informacji, jak rozwiązać ten problem. Nawet książka, którą właśnie napisałem: "Po prostu skompiluj i uruchom program".Niezdefiniowane symbole architektury x86_64: Z jakiej architektury należy korzystać?

test.cpp

#include <iostream> 
using namespace std; 

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

Kompilator mówi:

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 

próbowałem kompilacji z flagami jak -arch i386 i -m32 ale zawsze mówi, że to zła architektura. Którego powinienem użyć?

Robię to na Macu, ale nie używając XCode, po prostu gcc.

+0

Które gcc używacie? Macports? XCode? Wygląda na to, że twoja ścieżka jest pomieszana. – FFox

Odpowiedz

61

Błąd nie polega na tym, że jest to zła architektura, ponieważ std::cout (i inne symbole) nie są zdefiniowane.

Należy skompilować i połączyć z g++, a nie gcc, aby automatycznie połączyć z prawidłowymi bibliotekami C++.

+1

Och, dzięki! Dlaczego gcc nie działa dla mnie? Każdy przykład, który widzę, to używanie gcc, czy to coś w stylu os x? – oskob

+2

@oskob Nie, to po prostu dlatego, że gcc jest kompilatorem C (chociaż obsługuje on składnię C++), a g ++ jest kompilatorem C++. –

+0

Czy gcc nie jest frontendem, który deleguje do g ++, gdy napotka pliki .cc/.cpp? – RobH

5

Błąd jest spowodowany, ponieważ kompilujesz z gcc, który jest tylko domyślnym łączem libc. Musisz skompilować się z g++, aby libstdc++ było również automatycznie dołączane.

0

Zastosowanie g ++ zamiast gcc, aby połączyć się z dokładną C++ bibliotek

+0

To jest komentarz, a nie odpowiedź. Należy uzyskać przedstawiciela, aby opublikować go jako taki. –

Powiązane problemy