Szerk: viszont óriási megtakarítást értek el azzal, hogy a pluginok neve nem pl "basename.so" hanem csak simán "basename". Szinte hallom, ahogy fellélegeznek a diszkek. (Nem, ezek nem futnak önállóan, csak pluginok. Kieg: ide települnek: /usr/local/lib64/bash/ (vagy amit --libdir -nek megadtunk configure-kor, + /bash).
Kieg: a pluginok, szokásos módon, importálnak szimbólumokat a a főprogramból, pl.: 'builtin_usage', 'internal_getopt'. Vagyis a főprogramot '-export-dynamic' opcióval kell szerkeszteni. És még így sem jó! Ugyanis ezekből egy 'libbuiltins.a' nevű libet csinál, és azt adja oda a linkernek:
libtool --mode=link gcc -o bash -export-dynamic -L./builtins ... -lbuiltins ...
Természetesen ez egyáltalán nem jelenti azt, hogy a libbuiltins.a elemei bekerülnének az executable-ba... Oda az kerül, ami a felsorolt objekt modulokban benne van. És amit azok használnak a *.a libekből. Vagy valamilyen export-fájlban szerepelnek. Hát itt egyikről sincs szó. No majd gondolkozom a kérdésen. (Csak meg ne ártson.)
Szerk: illetve a 'bash'-ba belekerülnek, az exportfájlba nem kerülnek bele. Íme egy lehetőség: -Wl,-bexpall linkeléskor, azután így generálni exportfájlt:
(echo '#! .'
dump -Tv -X64 bash | awk '/ EXP / { print $8 }' | sort -u) >bash.exp
Edit: kb 80%-ban sikerült, de még maradtak unresolved szimbóleumok... szóval goto 10
Később: tehát a convenience library nevű mágiával próbálkozunk.
volt: ar cru libbuiltins.a b1.o b2.o ...
lesz: libtool --mode=link gcc -static -o libbuiltins.la b1.o b2.o b3.o
abból látszik, hogy convenience, hogy nincs benne -rpath. (Mondjuk a libtool ilyenkor szomorúan néz, hogy *.lo fájlok helyett közönséges *.o objektekből kell dolgoznia.)
Ugyanis az lenne a koncepció, hogy a 'convenience library' teljes tartalma belekerül a kimenetbe... Na most ha nem ez történik, akkor vagy a libtool hibázik, vagy én értettem félre valamit.
Szerk: a libtool-t kell fejleszteni: ha adott egy 'dir/libfoo.la' nevű' convenience library', akkor azt mindenképpen a vonatkozó szabályok szerint kell kezelni, függetlenül attól, hogy a parancs-sorban hogyan szerepelt: -lfoo vagy dir/libfoo.la vagy dir/libfoo.a
- NevemTeve blogja
- A hozzászóláshoz be kell jelentkezni
- 916 megtekintés
Hozzászólások
Mikorra várhatjuk a Teve v1.0 GNU/AIX kiadását? :D
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Azt még nem tudom;)
A konkrét esetben úgy estem bele a bajba, hogy azt javasoltam valakinek, fordítson bátran gcc-vel bash-4.4-et magának.
Aztán feltámadt a lelkiismeretem, és magam is nekiálltam lefordítani, ekkor derült ki ez a plugin dolog. De ravaszak, mert a 'make all' nem csinál velük semmit, csak a 'make install', nyilván azért, hogy elaltassák az éberségemet;)
- A hozzászóláshoz be kell jelentkezni
Ezek után:
enable -f /usr/local/lib64/bash/sleep sleep
date; sleep 0.1; date # frissen betöltött sleep -- tizedmásodpercet vár
Egyetlen kérdés: nem kellene full-path nélkül is menjen?
Szerk: úgy látom, linuxban sem megy... Mondjuk AIX-on lehetne próbálkozni a -blibpath opcióval linkeléskor...
- A hozzászóláshoz be kell jelentkezni
Mert számít? Sohasem használtam még az enable parancsot, most néztem csak utána, hogy egy saját sleep-et mondtál a shellnek.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Most, hogy lefordult pluginostul, valószínűleg nem akarok pluginozni a bash-ban... Ami azt illeti, olyan 'fejlődés a fejlődés kedvéért' érzésem van tőlük. Nyilván öregszem;)
- A hozzászóláshoz be kell jelentkezni
A perzl.org-ról letöltött bash-4.4 viszont tényleg nem jó, végtelen ciklusban pörög. Debug infó nincs benne, nekem meg nincs xlc-m, szóval egycsapásra nem tudok mit mondani róla.
- A hozzászóláshoz be kell jelentkezni