In un progetto di libreria statica, ho un file di intestazione con funzioni dichiarate ma non implementate.Perché questo non crea più simboli definiti in questa libreria statica?
Ho un file .cpp che implementa queste funzioni.
Quindi, per comprendere meglio gli errori del linker, ho copiato il file cpp in modo da avere un duplicato esatto che viene anche compilato. Quindi, entrambi i file hanno una doppia implementazione per ogni simbolo nell'intestazione.
Compila e, quando utilizzato in un altro progetto, collega.
Qui un esempio minimo per la libreria statica:
api.hpp:
void printWhatever();
errortest.cpp e duplicate.cpp sono identici:
#include "api.hpp"
#include <iostream>
void printWhatever(){
std::cout << "hi " << "\n";
}
compilo questo come un statico libreria con questi 2 file sorgente. Vedo il compilatore produrre report per entrambi i file.
Ora usare questa libreria compilato in un eseguibile, un progetto diverso: main.cpp:
#include <api.hpp>
int main(int argc, const char * argv[]) {
printWhatever();
return 0;
}
Corre e stampe "hi".
Perché non esiste una definizione multipla per la funzione?
si dovrebbe ottenere questo errore nella * fase di collegamento *, non durante la compilazione di –
@ m.s. grazie ho corretto la domanda –
stai effettivamente collegando i due file oggetto insieme? –