PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : nice, libs werden nicht geladen



gruena
10.03.2011, 05:17
Moin Leute,

ich habe gerade folgendes Problem:

Dieses Script funktioniert problemlos:


export LD_LIBRARY_PATH=IA32-LIBS
./someElf with arguments


Ich habe die benötigten Libs im Ordner IA32-LIBS, welcher auf gleicher Ebene mit someElf liegt... das funktioniert auch soweit.

Das hier will allerdings nicht mehr laufen:



export LD_LIBRARY_PATH=IA32-LIBS
nice -n 0 ./someElf with arguments


someElf bricht dann mit der Fehlermeldung ab, dass es die Libs nicht finden kann.

Ich weiß jetzt nicht, wie ich someElf dynamisch einen bestimmten nice-Wert zuweisen kann. Ein "renice 0 $$" geht auch nicht, weil ich nicht aus dem Prozess rauskomme, bevor er gekillt wurde. Der Prozess liest und schreibt asynchron, und </dev/null >/dev/null & bewirkt einfach garnichts...

Also die Kern-Frage: wie kann man someElf mit einem eigenem nice-Wert aufrufen? :)

Viele Grüße,
gruena

Shakademus
10.03.2011, 06:52
Versteh ich das richtig: Der Prozess ist zu kurz, um renice verwenden zu können? Warum willst Du dann überhaupt die Priorität ändern?

retak
10.03.2011, 09:53
Die Kernfrage hast du dir ja schon beantwortet ;) Aber mir stellen sich ein paar weitere Fragen.
Du weist dass die Benutzung von LD_LIBRARY_PATH nicht unbedingt schön ist? Wenn auf einmal andere libs geladen werden kann alles mögliche seltsame passieren.
Warum willst du das eigentlich?
Ist das ein 64/32bit System? Ein Intel? Weil du hast da ja Libs für ein 32Bit System. IA = Intel vermute ich mal.
Kann es nicht sein, dass someElf seine LIBS findet? Es funktioniert ja. Nur das Programm nice geht nicht. Vllt. braucht nice libs, die es jetzt nicht mehr finden kann?
Wo ist eigentlich die Fehlermeldung?

Wenn man jetzt noch weis was in dem Ordner IA32-LIBS alles drin ist, und auch noch eine someELF hat, kann man das ja mal selbst ausprobieren :)

gruena
10.03.2011, 13:13
Versteh ich das richtig: Der Prozess ist zu kurz, um renice verwenden zu können? Warum willst Du dann überhaupt die Priorität ändern?

Also es handelt sich um einen Game-Server, der diese alten Libs braucht.

Wenn ich den ohne LD_LIBRARY_PATH aufrufe, kommt die Fehlermeldung:



someAcc@someMachine:~$ ./cod2_lnxded
./cod2_lnxded: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory


Mit...

someAcc@someMachine:~$ export LD_LIBRARY_PATH=IA32-LIBS/

... geht alles bestens.

Wenn ich es über nice aufrufe:

someAcc@someMachine:~$ nice -n 0 ./cod2_lnxded
./cod2_lnxded: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory


Hat der kein Bock mehr sich um LD_LIBRARY_PATH zu kümmern. :D


Die Kernfrage hast du dir ja schon beantwortet ;)

Oh, ja. :D Ich meinte eine "automatische" Prioritätszuweisung. Ich möchte das alles gerne in EINEM Script packen.


Du weist dass die Benutzung von LD_LIBRARY_PATH nicht unbedingt schön ist? Wenn auf einmal andere libs geladen werden kann alles mögliche seltsame passieren.


Jo, habe ich schon von gelesen. Allerdings verstehe ich das nicht und es geht damit ziemlich gut. *die letzten Worte... *



Warum willst du das eigentlich?
Ist das ein 64/32bit System? Ein Intel? Weil du hast da ja Libs für ein 32Bit System. IA = Intel vermute ich mal.


Der Game-Server wurde mit gcc 3.3.4 kompiliert und jetzt haben die neuen Systeme die alte Library nicht mehr... soweit ich es verstanden habe.



Kann es nicht sein, dass someElf seine LIBS findet? Es funktioniert ja. Nur das Programm nice geht nicht. Vllt. braucht nice libs, die es jetzt nicht mehr finden kann?


Hmm, meinst du das?



someAcc@someMachine:~$ export LD_LIBRARY_PATH=IA32-LIBS
someAcc@someMachine:~$ echo "echo 123" > test.sh
someAcc@someMachine:~$ chmod +x test.sh
someAcc@someMachine:~$ nice -n 0 ./test.sh
123
someAcc@someMachine:~$


Also nice funktioniert auch mit LD_LIBRARY_PATH.


Wenn man jetzt noch weis was in dem Ordner IA32-LIBS alles drin ist, und auch noch eine someELF hat, kann man das ja mal selbst ausprobieren :)

Den Satz verstehe ich nur bis zum Komma. :)



someAcc@someMachine:~$ ls -l IA32-LIBS/
insgesamt 3444
lrwxrwxrwx 1 cod2 cod2 13 9. Mär 00:39 libgcc_s.so -> libgcc_s.so.1
-rw-r--r-- 1 cod2 cod2 627675 26. Nov 2003 libgcc_s.so.1
lrwxrwxrwx 1 cod2 cod2 18 9. Mär 00:39 libstdc++.so -> libstdc++.so.5.0.3
lrwxrwxrwx 1 cod2 cod2 18 9. Mär 00:39 libstdc++.so.5 -> libstdc++.so.5.0.3
-rwxr-xr-x 1 cod2 cod2 2886540 26. Nov 2003 libstdc++.so.5.0.3

retak
10.03.2011, 23:00
Hm i see. Ok warum das mit nice nicht geht weiss ich grad auch nicht. Schonmal geschaut ob du die alte lib nicht einfach nachinstallieren kannst?


root@mintux:/home/kater# apt-file search /usr/lib/libstdc++.so.5
libstdc++5: /usr/lib/libstdc++.so.5
libstdc++5: /usr/lib/libstdc++.so.5.0.7

Bei debian6 sind die noch dabei.

Ansonsten kopier die libs eben nach /usr/lib und führe ldconfig aus. Dann brauchst du nicht den Umweg über LD_LIBRARY_PATH gehen