Riferimento non definito a ...

di il
2 risposte

Riferimento non definito a ...

Buongiorno,
sono appena entrato nel forum, mi trovo a dover utilizzare una funzione di una classe in C++ (per il quale ho pochissima esperienza) su una macchina virtuale Ubuntu.
Su questa macchina ho implementato questa libreria per generare delle fingerprint di file audio.
Funziona tutto bene, ma ora avrei bisogno di effettuare alcuni test più in profondità.

Nello specifico, vorrei poter passare alla funzione
Codegen(const float* pcm, unsigned int numSamples, int start_offset)
che si trova nel file Codegen.cxx un array di float da me generato, per verificare la fingerprint in uscita (e confrontarla con un'altra generata allo stesso modo da una libreria derivata da questa).
Per fare questo nella cartella /src della libreria ho aggiunto il seguente file:
ztest.cpp

#include "Codegen.h"

float sample[] = {0.2328124, -0.44754124, -0.29985702, -0.025578022, 0.77680266, 0.24578595, -0.5593387, -0.70831835, 0.80841076, 0.5401865, -0.04987991, 0.22590506, -0.22304022, -0.32349646, 0.056701064, 0.04828608, 0.29067707, -0.3870566, 0.88091457, 0.96539235, -0.32412112, 0.84661734, 0.12184203, -0.08874595, -0.03614521, -0.063005805, 0.09807551, -0.8738711, -0.4128102, 0.20638204, 0.382231, -0.3008684, -0.61689794, 0.8270527, 0.56563747, 0.7069404, 0.95453227, 0.14550817, -0.6304072, 0.51739144, -0.9287702, 0.11233115, 0.28806257, -0.3312515, -0.19979787, 0.58305144, 0.91676366, 0.18790865, -0.70886743, -0.93533623, -0.28562546, 0.7600589, 0.61751306, -0.73166716, 0.17852998, 0.5759449, -0.5457231, -0.8128933, 0.23393083, 0.5097649, -0.5200646, -0.024920821, 0.36022377, 0.3508358, -0.29587436, -0.18038285, 0.8774209, -0.26306593, 0.074834704, -0.5395713, -0.4930787, 0.10915184, 0.004393935, -0.26088107, -0.6066847, -0.8989202, 0.3169018, -0.68760455, 0.16897774, -0.7558155, 0.6655463, 0.71446514, 0.23913598, 0.45274258, 0.95612955, -0.37615538, 0.53502595, 0.46318507, -0.34103703, 0.32251132, -0.29144764, -0.95696414, -0.83254206, -0.19202161, -0.288548, 0.43386233, 0.29671597, -0.76028454, -0.5905427, -0.9878597, -0.5060253, -0.19020998, 0.22775769, -0.31577635, -0.10408783, 0.6943835, -0.38519347, -0.99944365, -0.2871747, 0.46989465, -0.4398954, -0.41507697, -0.099921465, 0.79788566, -0.3728429, 0.21325552, 0.20274913, 0.8615962, -0.5092701, -0.9891448, 0.59607565, 0.06886637, -0.77052796, -0.18430376, 0.2144264, -0.9509901, -0.5411892, 0.10881591, -0.9564545, 0.6226791, -0.46109557, 0.15200055, -0.920413, 0.90350306, -0.29125178, -0.5093752, -0.87508607, 0.21897721, -0.863088, 0.94941604, 0.8420944, -0.6323198, 0.0047278404, 0.12618625, -0.27251828, -0.3564042, 0.2181958, -0.5904881, -0.946013, -0.12941658, -0.0441885, 0.22854137, 0.9851574, -0.2534356, -0.3174045, -0.114607334, 0.55172324, 0.47473717, -0.41630232, 0.5030415};
float* audio = sample;
unsigned int numSamples =160; 


int main()

{

	Codegen * pCodegen = new Codegen(audio, numSamples, 0);
            return 0;

}
compilandolo dalla cartella corretta con:
sudo g++ ztest.cpp
ed ottenendo il seguente risultato:
/tmp/ccgutWza.o: nella funzione "main":
ztest.cpp:(.text+0x31): riferimento non definito a "Codegen::Codegen(float const*, unsigned int, int)"
collect2: error: ld returned 1 exit status
purtroppo la mia esperienza con c++ è davvero minima, e mi sono fermato a questo errore (non riesco a capire se è un problema di come richiamo la funzione)
Ho guardato nel forum richieste simili ma non ho trovato modo di poter utilizzare i consigli a problematiche simili.
Cosa sto sbagliando?

Grazie mille
Luca

2 Risposte

  • Re: Riferimento non definito a ...

    Ciao,
    ho provato a risolvere ma ancora senza successo. L'ultima prova è stata quella di aggiungere
    #include "Codegen.cxx"
    in questo modo non ho l'errore di riferimento alla classe Codegen, ma ottengo questo:
    /tmp/ccqo3Jvs.o: nella funzione "Codegen::Codegen(float const*, unsigned int, int)":
    ztest.cpp:(.text+0xa8): riferimento non definito a "Whitening::Whitening(float const*, unsigned int)"
    ztest.cpp:(.text+0xb8): riferimento non definito a "Whitening::Compute()"
    ztest.cpp:(.text+0xcd): riferimento non definito a "AudioBufferInput::AudioBufferInput()"
    ztest.cpp:(.text+0xff): riferimento non definito a "AudioBufferInput::SetBuffer(float const*, unsigned int)"
    ztest.cpp:(.text+0x11b): riferimento non definito a "SubbandAnalysis::SubbandAnalysis(AudioStreamInput*)"
    ztest.cpp:(.text+0x12b): riferimento non definito a "SubbandAnalysis::Compute()"
    ztest.cpp:(.text+0x14d): riferimento non definito a "Fingerprint::Fingerprint(SubbandAnalysis*, int)"
    ztest.cpp:(.text+0x15d): riferimento non definito a "Fingerprint::Compute()"
    /tmp/ccqo3Jvs.o: nella funzione "Codegen::compress(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)":
    ztest.cpp:(.text+0x660): riferimento non definito a "deflateInit_"
    ztest.cpp:(.text+0x686): riferimento non definito a "deflate"
    ztest.cpp:(.text+0x6b0): riferimento non definito a "deflateEnd"
    ztest.cpp:(.text+0x6d1): riferimento non definito a "base64_encode[abi:cxx11](unsigned char const*, unsigned int, bool)"
    collect2: error: ld returned 1 exit status
    
    cioè un errore per tutte le classi incluse in Codegen.
    Sembra un problema di "visibilità" di quella classe, ed ho continuato con l'includere tutte le classi scritte sopra, fermandomi a deflateInit_

    Non so se è la procedura giusta, immagino ci sia un problema a monte...
    Se qualcuno avesse suggerimenti, sarebbe magnifico!

    Grazie!
  • Re: Riferimento non definito a ...

    Ok, credo di aver capito di aver sbagliato approccio.
    con il comando
    sudo g++ ztest.cpp
    sto compilando solo il file ztest.cpp. dovrei quindi aggiungere anche Codegen.cxx
    sudo g++ ztest.cpp Codegen.cxx
    ma questo si porterebbe dietro la necessità di compilare anche tutti gli altri file, aggiungendoli uno per uno.
    Utilizzerò quindi il MakeFile per compilarli tutti insieme e modificherò la libreria quel poco che basta per i test che mi serve.

    Insomma era un errore di ignoranza...
Devi accedere o registrarti per scrivere nel forum
2 risposte