2017-06-10 1 views
-1

Ich habe diesen sehr einfachen C++ - Code, der nicht kompiliert wird. Was mache ich falsch?"ld: Symbol (e) nicht für Architektur x86_64 gefunden" (g ++, OS X 10.11)

main.cpp

#include "thing.hpp" 

int main() { 
    thing* t = new thing; 
    t->foo(); 
    delete t; 
    return 0; 
} 

thing.cpp

#include "thing.hpp" 

void thing::foo() {}; 

thing.hpp

#ifndef THING_H 
#define THING_H 

class thing { 
public: 
    void foo(); 
}; 

#endif 

ich mit dem folgenden Befehl kompilieren:

g++ main.cpp -o main 

Das ist mein Ausgang:

Undefined symbols for architecture x86_64: "thing::foo()", referenced from: _main in main-29d9b1.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Alle Dateien im selben Verzeichnis befinden. Ich verwende Apple LLVM Version 8.0.0 (clang-800.0.42.1) unter OS X 10.11.6. Danke im Voraus!

+0

Sie nicht mit der 'thing.cpp'-Datei erstellen. Es muss auch in deinem Build enthalten sein, ansonsten weiß der Compiler das nicht magisch. [Verwandte Lektüre über * Übersetzungseinheiten *] (https://en.wikipedia.org/wiki/Translation_unit_%28programming%29). –

+2

suchen Sie immer nach Ihren Fehlermeldungen auf Google, Sie werden fast immer die Antwort finden. – xaxxon

Antwort

-2

Kurz vor mir fragte jemand die gleiche Frage here und es wurde festgestellt, dass richtig jede CPP-Datei zu g ++ übergeben werden muss.

So dies funktioniert:

g++ main.cpp thing.cpp -o main 
+0

doppelte Fragen brauchen keine zusätzlichen Antworten, nur einen Link zu der bestehenden Antwort als Kommentar oder eine enge Abstimmung, wenn Sie den Ruf haben. – xaxxon

Verwandte Themen