Ist es möglich, ein Funktionssymbol aus einer ausführbaren Datei zu laden?Java

Java-Forum
Anonymous
 Ist es möglich, ein Funktionssymbol aus einer ausführbaren Datei zu laden?

Post by Anonymous »

Ich habe 2 Dateien:

Code: Select all

foo.c
:

Code: Select all

#include 
int Main(int a) {
printf("A%dB",a);
}
int main() {
return Main(1);
}

Code: Select all

bar.c
:

Code: Select all

extern int Main(int);
int main() {
return Main(2);
}
Wenn ich foo.c in eine ausführbare Datei kompiliere (

Code: Select all

gcc -fPIC foo.c -o foo.out
) und führen Sie es aus, es gibt korrekt A1B aus.
Gleiches gilt für das Kompilieren von foo.c in eine gemeinsam genutzte Objektdatei (

Code: Select all

gcc -shared -fPIC foo.c -o libfoo.so
) und bar.c in eine ausführbare Datei, die libfoo.so lädt (

Code: Select all

gcc bar.c -L. -lfoo -o bar.out
) und führe es aus, es druckt korrekt A2B.
Aber wenn ich versuche, (1) bar.out mit foo.out zu verknüpfen oder (2) libfoo.so auszuführen, wird es (1) nicht verknüpft (

Code: Select all

/usr/bin/ld: cannot use executable file './libfoo .so' as input to a link
) oder (2) stürzt beim Start mit Segmentierungsfehler ab (Core-Dump)
Gibt es eine Möglichkeit, eine Datei zu erstellen, die ausgeführt werden kann und eine gültige gemeinsame Objektdatei in derselben Datei ist, und wenn nicht, gibt es andere Möglichkeiten, die ausführbare Datei a.out (vielleicht eine Art Dlopen-Hack) von b.out zu laden, um eine Funktion von a.out auszuführen
Ich bin auch daran interessiert, ob es eine Möglichkeit gibt, die ausführbare Datei mithilfe von Javas System.loadLibrary("native") zu laden (wenn möglich, nur die C-Seite und nicht die Java-Seite zu ändern)
Zu Ihrer Information, ich möchte dies tun, damit ich eine ausführbare Android-Datei haben kann, die von so etwas wie termux ausgeführt werden kann und gleichzeitig von Android.jar geladen werden kann, um als eigenständige GUI-App ausgeführt zu werden

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post