Početak › Forumi › Linuks distribucije › Mandriva › Softver › relocation error???
- This topic has 12 odgovora, 2 glasa, and was last updated 22 years, 5 months ranije by
popeye.
-
AutorČlanci
-
5. mart 2004. u 1:33 pm #3409
Nostromo
UčesnikDa 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 #17308popeye
Glavni majstorDa li si dodavao pakete koji nisu za tvoju veziju Mandrake-a?
6. mart 2004. u 8:11 am #17309Nostromo
Uč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 #17310popeye
Glavni 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 #17311Nostromo
UčesnikDobro, ali da li mozes nesto vise da kazes u vezi ovoga?
7. mart 2004. u 12:02 am #17312popeye
Glavni 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 #17313Nostromo
Uč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 #17314popeye
Glavni 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 #17315Nostromo
Uč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 #17316popeye
Glavni 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.