Код: Выделить всё
foo.c:
#include
int Main(int a) {
printf("A%dB",a);
}
int main() {
return Main(1);
}
Код: Выделить всё
bar.c:
extern int Main(int);
int main() {
return Main(2);
}
Код: Выделить всё
gcc -fPIC foo.c -o foo.outТо же самое касается компиляции foo.c в общий объектный файл (
Код: Выделить всё
gcc -shared -fPIC foo.c -o libfoo.soКод: Выделить всё
gcc bar.c -L. -lfoo -o bar.outНо если я попытаюсь (1) связать bar.out с foo.out или (2) выполнить libfoo.so, он (1) не свяжется (
Код: Выделить всё
/usr/bin/ld: cannot use executable file './libfoo .so' as input to a linkЕсть ли способ создать файл, который может быть выполнен и является допустимым общим объектным файлом в том же файле, и если нет, есть ли другие способы загрузить исполняемый файл a.out (возможно, какой-то хак dlopen) из b.out для запуска функции из a.out
Мне также интересно, есть ли способ загрузить исполняемый файл с помощью Java System.loadLibrary("native") (если возможно, меняя только сторону c, а не сторону Java)
К вашему сведению, я хочу это сделать, чтобы у меня был исполняемый файл Android, который можно запускать из чего-то вроде termux, а также загружать из Android.jar для запуска как отдельное приложение с графическим интерфейсом
Подробнее здесь: https://stackoverflow.com/questions/798 ... executable
Мобильная версия