PDA

Visualizza la versione completa : [C++] Errore linker "undefined reference to..."


pietrol83
05-08-2011, 11:11
salve a tutti
sto iniziando a programmare in cpp e un esercizio mi chiede di creare una libreria statica che implementa una funzione di stampa array. io ho creato un progetto per la libreria e un progetto di prova che sono i seguenti:

mioarray.h


void stampa_array(int*, int);


mioarray.cpp


#include<iostream>
#include<string>
#include"mioarray.h"
using namespace std;

void stampa_array(int* vet, int numelem)
{
int i = 0;
while (i <= numelem)
cout << vet[i] << " ";
cout << "\n";
}


provaarray


#include <iostream>
#include <string>
#include "mioarray.h"

using namespace std;

int main()
{
int i = 0;
int* vettore;
int numeroelem;

cout << "inserire il numero di elementi da inserire nel vettore \n";
cin >> numeroelem;

while (i <= numeroelem - 1)
{
cout << "immettere il " << (i + 1) << "^ elemento ";
cin >> vettore[i++];
}

stampa_array(vettore, numeroelem);

system("pause");
return 0;
}


la libreria mioarray.a mi viene creata mentre quando mando in compilazione ed esecuzione il progetto provaarray mi viene visualizzato il seguente errore:

[Linker error] undefined reference to `stampa_array(int*, int)'
ld returned 1 exit status
[Build Error] [provaarray.exe] Error 1


dove ho sbagliato?? e cosa devo fare per rimediare???

oregon
05-08-2011, 12:05
Devi indicare nelle proprietà del progetto la libreria che vuoi linkare.

pietrol83
05-08-2011, 12:12
la libreria da linkare è specificata, è mioarray.h ed è presente sia nella realizzazione del metodo sia nel progetto di prova.

oregon
05-08-2011, 13:40
Originariamente inviato da pietrol83
la libreria da linkare è specificata, è mioarray.h ed è presente sia nella realizzazione del metodo sia nel progetto di prova.

mioarray.h *non* è una libreria, ma un file header. La libreria è il file mioarray.a, ed è quello che devi indicare al linker (non nel tuo sorgente), nell'ambiente che usi o nella linea di comando se è il caso.

Freax
05-08-2011, 14:16
Diciamo che la libreria è qualcosa meno dell'eseguibile e che si crea sempre tramite compilazione, non puoi creare una libreria semplicemente scrivendo del codice, la devi comunque compilare, la libreria è in pratica una collezione di 1 o più file oggetto.

non c'è una estensione precisa per un file di libreria, è convenzione usare .a o .lib, ma in realtà non c'è uno standard scritto, è uno standard de facto.

Se puoi, specifica anche l'ambiente che usi.

http://www.delorie.com/djgpp/v2faq/faq8_22.html

pietrol83
05-08-2011, 14:33
la librearia con estensione .a viene creata tranquillamente senza nessun problema, però quando mando in esecuzione il progetto non la linka.

Freax
05-08-2011, 14:48
Originariamente inviato da pietrol83
la librearia con estensione .a viene creata tranquillamente senza nessun problema, però quando mando in esecuzione il progetto non la linka.

se non ci dici che ambiente usi è praticamente impossibile darti una mano, probabilmente si tratta di un argomento da passa al compilatore o all'IDE, ma se non dici cosa usi noi non abbiamo la palla di vetro ...

pietrol83
05-08-2011, 15:17
io uso il dev C++

oregon
05-08-2011, 15:18
Originariamente inviato da pietrol83
la librearia con estensione .a viene creata tranquillamente senza nessun problema, però quando mando in esecuzione il progetto non la linka.

Perché lo ripeti? Si è capito ...

Ti ho risposto già che devi indicare il nome della libreria

tuofile.a

nell'ambiente di sviluppo, nelle proprietà del tuo progetto o, nelle linea di comando per la compilazione ...

Loading