Почетак › Форуми › Линукс дистрибуције › Mandriva › Софтвер › relocation error???
- Ова тема има 12 одговора, 2 гласа, а последњи пут ју је ажурирао
popeye, 22 године, 7 месеци раније.
-
АуторЧланци
-
5. март 2004. у 1:33 pm #3409
Nostromo
Учесник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. март 2004. у 3:01 pm #17308popeye
КључарDa li si dodavao pakete koji nisu za tvoju veziju Mandrake-a?
6. март 2004. у 8:11 am #17309Nostromo
УчесникEvo 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. март 2004. у 2:34 pm #17310popeye
КључарProbaj 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. март 2004. у 8:31 pm #17311Nostromo
УчесникDobro, ali da li mozes nesto vise da kazes u vezi ovoga?
7. март 2004. у 12:02 am #17312popeye
КључарPaket 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. март 2004. у 11:13 am #17313Nostromo
УчесникPaket 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. март 2004. у 2:17 pm #17314popeye
КључарVezano 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. март 2004. у 8:46 pm #17315Nostromo
УчесникE 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. март 2004. у 9:02 pm #17316popeye
КључарGCC 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] -
АуторЧланци
Форум ‘Софтвер’ је закључан за нове теме и одговоре.