Runtime Linker einstellen, aber wie?



  • Hi,

    Ich versucht mit geringem Erfolg seid einigen Stunden dem Linux Runtime Linker ein windowsähnliches Verhalten anzugewöhen. Das Ziel ist, dass der Runtimelinker (am Besten zuerst) nach Shared Libraries im Pfad der Anwendung sucht während die Anwendung geladen wird.

    Im Folgenden beschreib ich mal was ich bisher versucht hab:
    (1) Library so linken: ld -lMeinLib -rpath .; Diese Lösung kommt der Sache schon sehr nah was ich möchte, nur dass man das Programm dann von ./ aus starten muss, was ich nicht voraussetzen kann.

    (2) Library so linken: ld libMeinLib.so; Diese Lösung klappt ganz gut, allerdings vermute ich, dass aufgrund der Anwendungröße das Lib einfach statisch mit reingelinkt wurde. Möchte ich auch nicht.

    Ein Startupscript halte ich für einen Workaround; meiner Meinung nach muss das auch so möglich sein.

    Mir ist bewusst, dass dieses Verhalten an Windows oft bemängelt wird, da man so einfach z.B. ein manipuliertes libc dazwischen hängen könnte. Ich möchte allerdings mein eigenes Library per Patch-System updaten können. D.h. ich brauch so oder so user-level-zugriff auf das Shared Library. Außerdem kann ich davon ausgehen, dass der User non-hostile ist. Wenn der User es drauf anlegt, kann er auch eine Funktion selektiv durch LD_PRELOAD (?) ersetzen.

    Grüße,
    Christoph



  • Dank "ankon" hab ich eine vernünftige Lösung gefunden, nochmal Danke.

    (1) http://freshmeat.net/projects/chrpath/

    (2) Die bessere Lösung man linkt die Applikation so: ld -z now -z origin -rpath 'ORIGIN/.'; bzw. in über GCC: -Wl,-z,origin -Wl,-rpath,\\ORIGIN/. -Wl,-z,now. Dieses Verhalten kommt dem was ich ereichen wollte am nächsten.

    Ebenfalls kann ich die Option --enable-new-dtags und --sort-common sehr empfehlen, das hat gut schwung in das Starten der Anwendung gebracht.

    Grüße,
    Christoph


Anmelden zum Antworten