Кросс-компиляция в arm-linux с использованием cygwin - PullRequest
2 голосов
/ 10 апреля 2011

Я пытаюсь кросс-компилировать strace с помощью эмулятора cygwin to Android. Я использовал эту статью как моя отправная точка. Я установил кросс-компилятор, следуя этим инструкциям . Затем я подготовил make-файл, используя

./configure -host=arm-linux

Теперь, когда я делаю make, я получаю следующую ошибку:

$ make
make  all-recursive
make[1]: Entering directory `/home/bruce/strace-4.6'
Making all in tests
make[2]: Entering directory `/home/bruce/strace-4.6/tests'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/bruce/strace-4.6/tests'
make[2]: Entering directory `/home/bruce/strace-4.6'
arm-linux-gcc -DHAVE_CONFIG_H -I.  -I./linux/arm -I./linux -I./linux  -Wall -Wwr
ite-strings -g -O2 -MT block.o -MD -MP -MF .deps/block.Tpo -c -o block.o block.c

block.c: In function `block_ioctl':
block.c:198: error: `u64' undeclared (first use in this function)
block.c:198: error: (Each undeclared identifier is reported only once
block.c:198: error: for each function it appears in.)
block.c:271: error: `BLKTRACESTOP' undeclared (first use in this function)
make[2]: *** [block.o] Error 1
make[2]: Leaving directory `/home/bruce/strace-4.6'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/bruce/strace-4.6'
make: *** [all] Error 2

Это происходит, даже если я добавляю -static после переменной CFLAGS в Makefile (зачем мне это делать?). Пожалуйста, помогите.

Вот строки 198-206:

case BLKGETSIZE64:
        if (exiting(tcp)) {
            uint64_t val;
            if (syserror(tcp) || umove(tcp, arg, &val) < 0)
                tprintf(", %#lx", arg);
            else
                tprintf(", %" PRIu64, val);
        }
        break;

1 Ответ

2 голосов
/ 01 июня 2011

Прежде всего, как определяется BLKGETSIZE64 #?В определении может быть скрыт токен "u64".

Является ли 64-битный тип int четко определенным объектом для arm-linux-gcc?Просто мысль ... но это должно быть, верно?

И -статическое добавление к CFLAGS приводит к тому, что двоичная программа связывается статически, а не динамически.Это означает, что весь код, необходимый для запуска, будет встроен в исполняемый файл.Обычно он динамически связывается с библиотеками общих объектов (.so файлы, библиотеки DLL под Windows), но вы не можете обязательно рассчитывать на конкретные библиотеки, которые ваша программа должна включать во встроенное устройство.Вместо того, чтобы устанавливать все библиотеки на контроллере, вы можете (возможно) сэкономить место, просто встроив соответствующие биты в свой исполняемый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...