Code: Select all
foo.cCode: Select all
#include
int Main(int a) {
printf("A%dB",a);
}
int main() {
return Main(1);
}
Code: Select all
bar.cCode: Select all
extern int Main(int);
int main() {
return Main(2);
}
Code: Select all
gcc -fPIC foo.c -o foo.outGleiches gilt für das Kompilieren von foo.c in eine gemeinsam genutzte Objektdatei (
Code: Select all
gcc -shared -fPIC foo.c -o libfoo.soCode: Select all
gcc bar.c -L. -lfoo -o bar.outAber 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 linkGibt 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
Mobile version