In einem statischen Bibliotheksprojekt habe ich eine Headerdatei mit deklarierten, aber nicht implementierten Funktionen.Warum erstellt dies nicht mehrere definierte Symbole in dieser statischen Bibliothek?
Ich habe eine .cpp-Datei, die diese Funktionen implementiert.
Dann, um Linker Fehler besser zu verstehen, kopierte ich die CPP-Datei, so dass ich ein genaues Duplikat davon habe, das auch kompiliert wird. Daher haben beide Dateien doppelte Implementierungen für jedes Symbol im Header.
Es kompiliert, und wenn in einem anderen Projekt verwendet, verbindet es.
Hier ein Minimum Beispiel für statische Bibliothek:
api.hpp:
void printWhatever();
errortest.cpp und duplicate.cpp sind identisch:
#include "api.hpp"
#include <iostream>
void printWhatever(){
std::cout << "hi " << "\n";
}
ich kompilieren dies als statische Bibliothek mit diesen 2 Quelldateien. Ich sehe, dass der Compiler Berichte für beide Dateien erstellt.
Jetzt benutze ich diese kompilierte Bibliothek in einer ausführbaren Datei, ein anderes Projekt: main.cpp:
#include <api.hpp>
int main(int argc, const char * argv[]) {
printWhatever();
return 0;
}
Es läuft und druckt "hallo".
Warum gibt es keine Mehrfachdefinition für die Funktion?
Sie sollten diesen Fehler bei der * Verknüpfungsstufe * erhalten, nicht beim Kompilieren –
@ m.s. Danke, ich korrigierte die Frage –
sind Sie tatsächlich verbinden die beiden Objektdateien zusammen? –