

nenajdena referencia v dynamickej kniznici
Zdravim.
Nevie mi niekto povedat preco pri kompilaci aplikacie s vlastnou kniznicou mi nevie najst referenciu na funkciu, ktora v danej kniznici je?
Na miesto toho vrati chybovu hlasku:
/tmp/ccBKzsAv.o: In function `main':
test.c:(.text+0xa): undefined reference to `test'
collect2: ld returned 1 exit status
Nieco robim zle ale vobec neviem co.
Zdrojak v ktorom funkciu volam vyzera takto:
#ifdef __cplusplus
extern "C"
#endif
char test ();
int main ()
{
return (int)test ();
}
ak bude treba prilozim aj zdrojak kniznice.
Ak pouzivas gcc tak
http://www.delorie.com/djgpp/doc/ug/compiling/gcc. html
ak je ta kniznica v nedefaultnom adresari tak potrebujes nastavit aj cesty na kniznice
http://www.network-theory.co.uk/docs/gccintro/gcci ntro_21.html
Zdravim.
Trosku neskoro ale skor sa mi nedalo, no uz mi to ide. Pouzil som zly prekladac. Kniznica bola zostavena cez g++ a aplikaciu, kde som chcel kniznicu pouzit som kompiloval cez cc a ten akceptoval iba volania, ktore boli deklarovane s klauzulou extern "C" a ja v kniznici mam umiestnenu aj triedu nie len funkcie.
Nahodou nevies co znamena extern "C" a jeho vyuzitie, alebo knihu kde sa o tom dozviem viac? Zatial som sa to nepotreboval.
Daj si do google slova "calling convention"
Alebo si daj do google slova "mix C and C++", alebo citaj napr. http://msdn.microsoft.com/en-US/library/0603949d%2 8v=VS.80%29.aspx, alebo si najdi calling convention pre C++ a C (a trebars aj pascal, ptz napr. cele WinAPI ma pascal calling convention a neni to jedno).
Rozdiel je v tom co prekladac musi urobit pred a po volani funkcie, neni to jedno. Z toho dovodu pri linkovani je rozlisovana konvencia, a funkciu s nespravnou konvenciou to vobec nenajde (pri linkovani nazov funkcie obsahuje aj dalsie potrebne informacie, takze linker nehlada len "test" ale vpodtste nieco ako "_test0IUGZFW" apod. prekladace si tam davaju aj potrebne informacie o tom jak je nutne tu fciu volat, ptz keby si volal tu fciu inac alebo s inym mnozstvom parametrov, tak by ti ten program na tom mieste dokonale skapal. Preto musis zadat aj tvojmu kompileru programu v programe spravnu konvenciu, s akou bola kompilovana kniznica.
Vdaka za pomoc. Vyzera ze je to, presne to co som potreboval odtial sa uz dalej odrazim, len som nevedel co presne hladat.