Početak›Forumi›Linuks distribucije›Mandriva›Softver›relocation error???
- This topic has 12 odgovora, 2 glasa, and was last updated 20 years, 1 month ranije by popeye.
-
AutorČlanci
-
5. mart 2004. u 1:33 pm #3409NostromoUčesnik
Da li neko zna zasto se pojavljuje ovakva greska prilikom startovanja
nekih programa:vdkb: relocation error: /usr/lib/libvdk.so.1: undefined symbol: __tiQ24SigC6Object
Ja sam pokusao da nadjem odgovor na nekim stranim forumima ali nisam uspeo nista konkretno da nadjem kako treba otkloniti ovakav problem niti sta ga prouzrokuje tacno. Ovo mi predstavlja veci problem jer ne mogu neke programe da koristim.
Inace konkretno ova poruka se pojavljuje kod programa vdk-builder koji je ustvari IDE za c++. Ako neko zna nesto o ovome zamolio bih ga da napise nesto o tome.5. mart 2004. u 3:01 pm #17308popeyeGlavni majstorDa li si dodavao pakete koji nisu za tvoju veziju Mandrake-a?
6. mart 2004. u 8:11 am #17309NostromoUčesnikEvo ovo su paketi:
vdk-1.2.4-3mdk.i586.rpm
vdk-devel-1.2.4-3mdk.i586.rpmi na kraju jedini koji nije mdk:
vdkbuilder-1.2.5-1.i386.rpm
s tim da sam probao i verziju 1.2.4.6. mart 2004. u 2:34 pm #17310popeyeGlavni majstorProbaj da nadjes source rpm za vdkbuilder, trebalo bi da bude sve ok. Taj je najverovatnije preveden drugom verzijom gcc-a u odnosu na ostala dva paketa.
6. mart 2004. u 8:31 pm #17311NostromoUčesnikDobro, ali da li mozes nesto vise da kazes u vezi ovoga?
7. mart 2004. u 12:02 am #17312popeyeGlavni majstorPaket vdkbuilder-1.2.5 je najverovatnije preveden uz 1.2.5 verzije biblioteka, a tvoje su 1.2.4. Moguce je da je doslo do promene izmedju te dve verzije, kao i da postoji razlika u verziji gcc-a kojom su biblioteke i vdkbuilder prevedeni.
11. mart 2004. u 11:13 am #17313NostromoUčesnikPaket vdkbuilder-1.2.5 je najverovatnije preveden uz 1.2.5 verzije biblioteka, a tvoje su 1.2.4. Moguce je da je doslo do promene izmedju te dve verzije, kao i da postoji razlika u verziji gcc-a kojom su biblioteke i vdkbuilder prevedeni.
OK to je jasno, nego nisi me razumeo, mene interesuje nesto vise o
samom problemu ‘relocation error-a’. Da li znas gde bih mogao da procitam o tome nesto?11. mart 2004. u 2:17 pm #17314popeyeGlavni majstorVezano je za dinamicke biblioteke i povezivanje sa osnovnim kodom tokom rada. Ako ne gresim, proces vezivanja dinamickih biblioteka bi trebao da ide ovako: trazenje, ucitavanje, podesavanje memorijskih adresa i prepoznavanje potrebnih simbola iz drugih biblioteka.
Problem “relocation error” se javlja u trecem koraku kada radni povezivac (run-time linker) treba da podesi memorijske adrese kako bi odgovarale mestu u memoriji na kom je biblioteka (ili njen deo) ucitana. Do problema dolazi, kao sto sam ranije pretpostavio, jer je neki od simobola promenio naziv (sto je opet izazvano razlicitom verzijom prevodioca ili biblioteka).
Ovo je inace veoma interesantna faza u pokretanju programa i najzasluznija za “sporost” grafickih okruzenja. Sto se vise puta menjaju adrese, aplikacije se sporije podizu, a zauzece memorije se povecava.
Pogledaj na primer http://iecc.com/linker/linker10.html
11. mart 2004. u 8:46 pm #17315NostromoUčesnikE tooo, super, hvala ti.
Nego ja se nesto bakcem sa C++ programiranjem u Linuxu (pokusavam)
pa me zanimaju neke stvari vezane za kompajliranje.
Naime ja sam ranije nesto malo programirao u C++ pod winblowsom
ali ovde se neke stvari razlikuju, kao recimo sintaksa vezana za
preprocesorske komande.
U Borlandovom Builderu sam ja nekada koristio oblik ‘#include ‘ medjutim kod GCC-a stalno javlja Warning vezano za zastarele oblike ovih hedera pa zato treba koristiti switch -Wno-deprecated da bi radio kao treba. Medjutim kada sam pokusao da upotrebim oblik ‘#include ‘ onda mi javlja niz gresaka i ne mogu da iskompajliram nista iako postoje ovi novi hederi, pa me zanima u cemu gresim, da li bi trebalo da podesim jos nesto? Probao sam da nadjem nesto u vezi ovoga u man-u ali nisam uspeo. Gde bih mogao o tome da procitam nesto vise?11. mart 2004. u 9:02 pm #17316popeyeGlavni majstorGCC 3.2.2 se pridrzava C++ standarda, tako da se *.h ekstenzija izostavlja, a I/O deklaracije vise nisu u globalnom imenovanom prostoru. Pridrzavanje standarda nalaze da sve I/O operacije moras prepraviti. Na primer:
Stari kod:
[code]# include
int main() {
cout << "Proba";
}[/code]Novi kod:
[code]
#includeint main() {
std::cout << "Proba";
}[/code]Jednostavno resenje bez prepravljanja dugackog koda (ali nije po pravilima):
[code]#include
using namespace std;int main() {
cout << "Proba";
}
[/code] -
AutorČlanci
Forum ‘Softver’ je zaključan za nove teme i odgovore.