Salut!
Am pierdut toata noaptea incercand sa imi dau seamna de ce naiba apar
niste undefined reference-uri si nu ma prind de nici o culoare. Sper sa ma
poata ajuta cineva. Multumesc.
Sistemul este:
gcc version 3.0.4 (Mandrake Linux 8.2 3.0.4-3mdk)
GNU ld version 2.12.90.0.3 20020323
binutils-2.12.90.0.3-1mdk
Linux localhost.localdomain 2.4.18-6mdk #1 Fri Mar 15 02:59:08 CET 2002 i686 unknown
Am o aplicatie comerciala care ofera niste librarii (compilate dinamic) si
.h-urile necesare. Plus documentatia de utilizare. .h-urile sunt instalate
in /opt/tpssna/src iar .a-urile in /opt/tpssna/lib
Fac un programel in C care foloseste functii din aplicatia asta:
[radu@localhost cpic_proxy]$ cat test.c
#include "cpi.h"
[...]
cminit(cid, sdn, &cpirc);
[...]
Bun, il compilez:
[radu@localhost cpic_proxy]$ gcc test.c -I/opt/tpssna/src -L/opt/tpssna/lib -lxcpi -o
test
[radu@localhost cpic_proxy]$
Si-l rulez:
[radu@localhost cpic_proxy]$ ./test
cminit error, rc=20
E ok, deci merge (nu conteaza ce a afisat, e ok asa).
Acuma apare problema mea: am nevoie sa fac o librarie wrapper in C++ in
care sa am un obiect ale carui metode apeleaza functiile oferite de
aplicatia comerciala. Sursa bibliotecii se afla in "cpic_proxy.cc",
insotita si de un "cpic_proxy.h".
[radu@localhost cpic_proxy]$ g++ cpic_proxy.cc -I./ -I/opt/tpssna/src -c
[radu@localhost cpic_proxy]$ g++ -shared -o libcpic_proxy.so cpic_proxy.o
[radu@localhost cpic_proxy]$ file cpic_proxy.so
cpic_proxy.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not
stripped
Ok, acuma am un programel de test:
[radu@localhost cpic_proxy]$ cat test.cc
#include "cpic_proxy.h"
[...]
int main(void)
{
cpic_class cpic;
cpic.connect();
cpic.disconnect();
}
care foloseste biblioteca. Cand il compilez:
[radu@localhost cpic_proxy]$ g++ test.cc -I/opt/tpssna/src -I./ -L/opt/tpssna/lib -L./
-lxcpi -lcpic_proxy
.//libcpic_proxy.so: undefined reference to `cminit(unsigned char*, unsigned char*,
int*)'
[...]
collect2: ld returned 1 exit status
[radu@localhost cpic_proxy]$
primesc undefined reference-uri cum se vede aici (sunt multe, pentru toate
functiile apelate din biblioteca comerciala, aici le-am substituit cu
"[...]").
Durerea mea este: de ce (naiba|dracu'|f****|etc) da "undefined reference"?
cand:
- biblioteca comerciala este si merge (cu programelul de test in versiunea .c)
- am indicat la linia de comanda -I-urile, -L-urile si -l-urile corecte ca
sa gaseasca tot ce are nevoie?
Daca ati citit pana aici va mai multumesc odata.
Ave,
Socrate
--
Radu Filip
Network Administrator @ Technical University of Iasi
[EMAIL PROTECTED] Information Technology and Communication Center
http://socrate.tuiasi.ro/ [EMAIL PROTECTED] | http://ccti.tuiasi.ro/
---
Pentru dezabonare, trimiteti mail la
[EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'.
REGULI, arhive si alte informatii: http://www.lug.ro/mlist/