2016-08-18 2 views
-1

Mit Code :: Blocks und der GNU GCC Compiler, ging ich zusammen und meine eigene Bibliothek gemacht:undefinierte Referenz, wenn eine C++ Bibliothek Funktion

//main.cpp (Library) 
int SampleAddInt(int i1, int i2) 
{ 
    return i1 + i2; 
} 

es auf eine .a-Datei kompiliert. Ich habe dann ein separates Projekt gemacht, um die Bibliotheksfunktion mit zu testen. Stellen Sie sicher, dass ich es richtig in den Build-Optionen verlinkt habe. Hier ist mein Code, um es in meinem Projekt mit:

//main.cpp (Test Project) 
#include <iostream> 


using namespace std; 

//Declaration of function from library 
int SampleAddInt(int i1, int i2); 

int main(){ 
    int x = SampleAddInt(2, 4); 
    cout << x << "test" << endl; 
} 

habe diesen Fehler bei dem Versuch, mein Testprojekt zu kompilieren:

main.cpp | 9 | undefined reference to `SampleAddInt (int, int)‘ |

Aus irgendeinem Grund scheint es, diese Funktion nicht zu finden. Ich habe dann extern "C" {...} um die Deklaration in meiner Testprojekt main.cpp Quelle gewickelt und es korrekt aufgebaut.

Warum muss ich, wenn meine Bibliothek aus einer main.cpp-Quelle kompiliert wurde, extern "C" für meine Bibliothek verwenden, um mit meinem Testprojekt zu arbeiten? Und warum, wenn ich nicht extern "C" verwende, sagt mir der Compiler, dass die Funktion eine undefinierte Referenz ist?

+1

Haben Sie versehentlich die Bibliotheksdatei mit 'gcc' anstelle von' g ++ 'vielleicht kompiliert? –

+0

Ich habe die IDE Code :: Blocks verwendet. Als ich die IDE eingerichtet habe, hat sie mich gefragt, welchen Compiler ich benutzen soll und ich habe den GNU GCC Compiler gewählt. Ist das nicht korrekt? Ich erinnere mich, dass ich den GNU-GCC-Compiler gelesen und sowohl C als auch C++ kompiliert habe. Es ist der einzige, der auf meinem System erkannt wurde. –

+0

Es ist der gleiche Compiler, korrekt, aber Sie müssen sicher sein, C++ - Dateien im C++ - Modus zu kompilieren. Normalerweise ist dies der Standard, wenn 'g ++' verwendet wird. Sie sollten den Befehlszeilenbefehl sehen, der im Konsolenfenster von Codeblocks verwendet wird. –

Antwort

0

Habe es funktioniert.

Das Problem war, dass es mit Code :: Blocks zu tun hatte.

Es war mit dem GCC-Compiler anstelle von g ++, so dass ich gezwungen wurde, extern "C" zu verwenden, wenn ich irgendeinen von meinem Bibliothekscode ausführen wollte.

Um das zu beheben, habe ich mit der rechten Maustaste auf main.cpp geklickt, auf Eigenschaften geklickt und die Variable von "CC" in "CPP" geändert und es wird jetzt mit g ++ kompiliert.

Verwandte Themen