2011-05-29 11 views
15

Estoy probando un programa cpp muy simple en osx solo para familiarizarme con la plataforma osx, así que estoy muy sorprendido de encontrar cualquier mensaje de error.Error de compilación "Símbolos no definidos" en osx

Aquí está el código:

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

Compilo ejecutando

gcc -Wall hello.cpp -o hello 

Entonces me sale este mensaje 'símbolos no definidos':

Undefined symbols: 
    "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 ccA9oElQ.o 
    "std::ios_base::Init::Init()", referenced from: 
     __static_initialization_and_destruction_0(int, int)in ccA9oElQ.o 
    "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const", referenced from: 
     std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccA9oElQ.o 
    "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned long) const", referenced from: 
     std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccA9oElQ.o 
     std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccA9oElQ.o 
     std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccA9oElQ.o 
    "___gxx_personality_v0", referenced from: 
     std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)in ccA9oElQ.o 
     _main in ccA9oElQ.o 
     ___tcf_0 in ccA9oElQ.o 
     unsigned long const& std::min<unsigned long>(unsigned long const&, unsigned long const&)in ccA9oElQ.o 
     __static_initialization_and_destruction_0(int, int)in ccA9oElQ.o 
     global constructors keyed to mainin ccA9oElQ.o 
     CIE in ccA9oElQ.o 
    "std::ios_base::Init::~Init()", referenced from: 
     ___tcf_0 in ccA9oElQ.o 
    "std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from: 
     _main in ccA9oElQ.o 
    "std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))", referenced from: 
     _main in ccA9oElQ.o 
    "std::cout", referenced from: 
     _main in ccA9oElQ.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

No sé si está relacionado: tengo ambos xcode 3 y xcode 4 instalados en mi MBP

Aquí está la información de la versión:

$ gcc -v 
Using built-in specs. 
Target: i686-apple-darwin10 
Configured with: /var/tmp/gcc/gcc-5666.3~6/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 
Thread model: posix 
gcc version 4.2.1 (Apple Inc. build 5666) (dot 3) 

Información del sistema

$ uname -a 
Darwin mbp002.local 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386 

Respuesta

26

Uso g++ en lugar de gcc ya se está compilando un programa en C++:

g++ -Wall hello.cpp -o hello 

Como alternativa, utilice clang++ ya que Apple no ha actualizado GCC en un tiempo y es poco probable que alguna vez lo actualice que:

clang++ -Wall hello.cpp -o hello 
+0

+1, pero en su orden sigue siendo 'gcc' (: –

+1

@Kiril No, no lo es! ;-) (pero sí, lo fue) –

+0

@Bevarious: gracias por la respuesta! Cuando intento 'clang ++', obtengo el error 'comando no encontrado'. Aunque puedo llamar clang, pero me da un montón de mensaje de error. (Supongo que es gcc vs g ++ tipo de problema ?!) –

6

Run usando g ++

g++ -Wall hello.cpp -o hello 

Si utiliza gcc, el C++ bibliotecas no están vinculados de manera predeterminada.

Cuestiones relacionadas