Я пытаюсь связать мою c -программу с библиотекой общих объектов (libfoo.so), используя кросс-компилятор ARM arm- linux -gnueabi-g cc. Я компилирую в системе Ubuntu и хочу запустить программу на устройстве Android. Компиляция работает, но когда я пытаюсь запустить программу на моем устройстве android, я получаю сообщение об ошибке.
Я создал простую тестовую программу, содержащую следующие файлы:
foo. c:
#include <stdio.h>
void foo(void){ puts("Hello, I am a shared library"); }
foo.h :
#ifndef foo_h__
#define foo_h__
extern void foo(void);
#endif
main. c:
#include <stdio.h>
#include "foo.h"
int main(void)
{
puts("This is a shared library test...");
foo();
return 0;
}
Затем я создал библиотеку общих объектов, используя:
arm-linux-gnueabi-gcc -c -fPIC foo.c
arm-linux-gnueabi-gcc -shared -o libfoo.so foo.o
Затем я скомпилировал свою программу, используя:
arm-linux-gnueabi-gcc -L/home/foo -o test main.c -lfoo
После загрузки тестовой программы на устройство Android с помощью adb я не могу ее запустить. Вместо этого я получаю сообщение об ошибке:
/system/bin/sh: ./test: No such file or directory
Я нахожусь в правильном каталоге, и тестовый файл присутствует, поэтому я предполагаю, что это общая библиотека, которая не может быть найдена. Я также попытался загрузить libfoo.so на устройство android (по тому же пути, который указан при компиляции), но он все равно не работает для запуска программы.
Я получил его работать с библиотекой stati c (foo.o), используя arm- linux -gnueabi-g cc -stati c -o test main. c foo.o , но не с общей библиотекой.
Как правильно связать общую библиотеку при кросс-компиляции, чтобы обеспечить возможность запуска программы на устройстве Android?