Можно ли загрузить символ функции из исполняемого файла?Linux

Ответить
Anonymous
 Можно ли загрузить символ функции из исполняемого файла?

Сообщение Anonymous »

У меня есть 2 файла:

Код: Выделить всё

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);
}
Если я скомпилирую foo.c в исполняемый файл (

Код: Выделить всё

gcc -fPIC foo.c -o foo.out
) и запустите его, он правильно выведет A1B.
То же самое касается компиляции foo.c в общий объектный файл (

Код: Выделить всё

gcc -shared -fPIC foo.c -o libfoo.so
) и bar.c в исполняемый файл, который загружает libfoo.so (

Код: Выделить всё

gcc bar.c -L. -lfoo -o bar.out
) и запускаю его, он правильно печатает A2B.
Но если я попытаюсь (1) связать bar.out с foo.out или (2) выполнить libfoo.so, он (1) не свяжется (

Код: Выделить всё

/usr/bin/ld: cannot use executable file './libfoo .so' as input to a link
) или (2) происходит сбой при запуске с ошибкой сегментации (дамп ядра)
Есть ли способ создать файл, который может быть выполнен и является допустимым общим объектным файлом в том же файле, и если нет, есть ли другие способы загрузить исполняемый файл a.out (возможно, какой-то хак dlopen) из b.out для запуска функции из a.out
Мне также интересно, есть ли способ загрузить исполняемый файл с помощью Java System.loadLibrary("native") (если возможно, меняя только сторону c, а не сторону Java)
К вашему сведению, я хочу это сделать, чтобы у меня был исполняемый файл Android, который можно запускать из чего-то вроде termux, а также загружать из Android.jar для запуска как отдельное приложение с графическим интерфейсом

Подробнее здесь: https://stackoverflow.com/questions/798 ... executable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»