am verzweifeln: externe funktionen



  • Hallo!

    gcc auf ARM Linux:

    Ich habe hier auf einem kleinen Gerät eine komplexe Anwendung laufen.
    Diese Anwendung ruft eine function in meinem Programm auf.

    ich inkludiere das hier in meinem Programm:

    <code>
    extern int InterfaceInit( int argc, char** argv );
    </code>

    Die Funktion implementiere ich dann und alles läuft.

    Aber WIE funktioniert das?
    Warum benötige ich keine Main? Lädt die komplexe Anwendung das Programm einfach und sucht sich den Einsprungpunkt aus? Läuft das ganze dann im gleichen Thread?
    Ist es möglich, dass die kompl. Anwendung auch in ein bereits im Speicher laufendes Programm springt?

    VIELEN VIELEN DANK!

    marcel



  • Prinzipiell muss eine Programm nicht umbedingt ein int main( .. ) haben. Du kannst deinem linker auch sagen dass der Einsprungpunkt in dein Programm irgend eine andere funktion ist wie in deinem Beispiel zb InterfaceInit(). Ob dem so ist kannst du an den Linker-Parametern sehen.
    Ob das jetzt die Antwort auf deine Frage ist weiss ich allerdings nicht.
    Kurt



  • Wenn du nur ein Plugin für die Anwendung schreibst, dann lädt die Anwendung vermutlich dein Binary und sucht sich den Einspungspunkt raus. Schau dir zB mal man: dlsym(3) an.

    Aber ohne genau zu wissen welche Anwendung du benutzt, kann man da nicht viel sagen. Lies am besten in der Doku oder im Code nach oder Frag die Entwickler.



  • kingruedi schrieb:

    Wenn du nur ein Plugin für die Anwendung schreibst, dann lädt die Anwendung vermutlich dein Binary und sucht sich den Einspungspunkt raus. Schau dir zB mal man: dlsym(3) an.

    Sowas in der Art wird er machen. Am Linker wird da nichts rumgespielt.
    Es ist ein TomTomGo und die tatsächliche Einsprungfunktion heisst TTUIInit().
    Ich gebe der Hauptanwendung den Ort meiner Binary an und er called die Function dann irgendwie.

    Kann mir etwas zu diesen Fragen sagen?:

    Läuft das ganze dann im gleichen Thread?
    Ist es möglich, dass die kompl. Anwendung auch in ein bereits im Speicher laufendes Programm springt?

    Ich versuche einen Daemon zu schreiben, der bei Start des Geräts schon gestartet wird. Leider funktioniert das Programm dann nicht mehr als Teil der Hauptanwendung die da schon drauf läuft.

    Macht es Sinn, dass ich das weiter in die Richtung versuche? Ich will die Anwendung nicht aufsplitten (das Menü als Plugin und der Rest als Service).

    Danke!



  • Läuft das ganze dann im gleichen Thread?
    Ist es möglich, dass die kompl. Anwendung auch in ein bereits im Speicher laufendes Programm springt?

    In ein laufendes Programm kann man nicht einfach reinspringen, weil die Speicherbereiche der einzelnen Programme bei normalen Betriebssystemen abgeschirmt sind. Aber dafür gibt es diverse IPC und RPC Methoden.
    http://www.ecst.csuchico.edu/~beej/guide/ipc/

    Das ganze läuft im gleichen Thread (außer die Anwendung macht explizit einen Thread auf, der das Plugin lädt).

    Wie gesagt, schau dir dlsym und co an.



  • Ok, danke! Diese Infos bringen schonmal was. Danke!

    Marcel


Anmelden zum Antworten