undefined reference

6 posts / 0 new
Last post
andrei
undefined reference

Cand compilez un program(jacl) cu biblioteca readline obtin:
[andrei@localhost src]$ make
gcc -O2 -w -DUNIX -Wall -DCONSOLEJACL -o jacl jacl.c interpreter.c loader.c new_saver.c logging.c parser.c display.c utils.c jpp.c resolvers.c errors.o encapsulate.o -lm -lreadline;
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `PC'
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `tgetflag'
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `tgetent'
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `UP'
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `tputs'
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `tgoto'
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `tgetnum'
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `BC'
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../libreadline.so: undefined reference to `tgetstr'
collect2: ld returned 1 exit status
make: *** [jacl] Error 1
[andrei@localhost src]$

Nu stiu ce inseamna si cum se corecteaza. Multumesc anticipat. Sunt f. incepator.

ing. Patkos Csaba
ing. Patkos Csaba's picture
Re: undefined reference

1) Ce sistem de operare folosesti? Pare a fi redhat ...  :-\
2) Cel mai probabil problema este ca ai gcc versiunea 4.1.1 iar programul a fost scris pentru un gcc mai nou.
3) NU, NU se updata gcc-ul, pentru ca impune update la toate librariile C ale sistemului. Iar cum sistemul tau de operare a fost scris pentru gcc 4.1.1 mai mult ca sigur ca un update fortat la gcc mai nou va distruge complet sistemul.
4) Incearca sa folosesti Mandriva 2008.1, are gcc 4.2.3 si probabil nu o sa mai ai eroarea de mai sus.
5) Incearca sa downloadezi o versiune mai veche a programului tau, cam din acelasi perioada temporala ca si sistemul tau de operare, care este scris pentru gcc 4.1.1.

Cam atat, alte idei nu am.

Csabi's BLOG

Linux registered user # 457717

cosmin
cosmin's picture
Re: undefined reference

Nici pe Mandriva nu se compilează. Andrei, trebuie să linkezi biblioteca termcap. Asigură-te că o ai instalată şi apoi modifică fişierul Makefile la linia 22 astfel:

Înainte:
$(CC) $(CFLAGS) -DCONSOLEJACL [...] encapsulate.o -lm -lreadline;

După:
$(CC) $(CFLAGS) -DCONSOLEJACL [...] encapsulate.o -lm -lreadline -ltermcap;

[url=http://counter.li.org/]Linux registered user #368449[/url]

andrei
Re: undefined reference

Am Mandriva la servici, si Fedora acasa. Voi incerca sfaturile primite. Poate explicati mai tehnic ca alta data sa ma descurc si singur. "Biblioteca" readline cauta niste variabile care nu exista ? Ce inseamna undefined reference to .... Cer scuze, pt nepricepere.

cosmin
cosmin's picture
Re: undefined reference

andrei wrote:
"Biblioteca" readline cauta niste variabile care nu exista ?

Cam aşa ceva. În sursele readline acele simboluri pe care nu le găseai sunt definite ca "extern". De exemplu, în tcap.h:50 scrie:
extern int tgetflag ();

Readline nu are implementări proprii pentru acele funcţii, ci se bazează pe ce îi oferă sistemul. Şi în loc să linkeze direct termcap, ne lasă pe noi să alegem, pentru că poate avem alte variante ale funcţiilor respective. De exemplu, se poate lega fie termcap, fie curses. Amândouă bibliotecile oferă implementările necesare.

[url=http://counter.li.org/]Linux registered user #368449[/url]

andrei
Re: undefined reference

Fara ajutorul vostru nu m-as fi descurcat. Programul se compileaza. Multumesc.