Кажется, что у arm toolchain нет библиотек C
Я пытаюсь скомпилировать простую программу с помощью набора инструментов arm. И библиотека stdio указывает на другую библиотеку, что приводит к следующей ошибке:
/home/sansari/tools/arm-eabi-4.7/bin/arm-eabi-gcc hello.c -o hello
In file included from hello.c:3:0:
/home/sansari/tools/arm-eabi-4.7/bin/../lib/gcc/arm-eabi/4.7/include-fixed/stdio.h:50:23: fatal error: sys/cdefs.h: No such file or directory
compilation terminated.
make: *** [hello] Error 1
Сначала я подумал, что этот файл находится в некотором подкаталоге набора инструментов, и мне нужно включить папку для этой библиотеки в мой make-файл. Но быстрый вывод дерева говорит, что это не так. Итак, учитывая, что я успешно использовал этот набор инструментов для более крупного проекта, я знаю, что он откуда-то скопирован. Итак, мой вопрос, как мне добавить его в этот проект, пожалуйста? И из какого места его можно скопировать? Я пытаюсь понять, почему его нет в папках набора инструментов, и как мне его добавить в свой проект, пожалуйста.
@ Олаф - Вы мне очень помогли; У меня, однако, есть немного больше кривой обучения. Но я понимаю, что вы наставляете. Я знаю, что у меня есть библиотеки в моей системе сборки, так как они были успешно собраны для этой платформы. Я даже знаю, что это в моем WORKING_DIRECTORY. Чего я не знаю, так это того, могу ли я скопировать папку и полностью решить проблему, или мне нужно продолжать компиляцию и видеть, какие ошибки я получаю. То есть делать это постепенно. Например, один из файлов, который отсутствовал, был cdefs.h. И я смог найти его в папке:
/home/sansari/ndk/android-ndk-r10d/platforms/android-19/arch-arm/usr/include/sys/cdefs_elf.h
Я скопировал его, и процесс сборки перешел к следующему этапу. Я хотел бы знать, должен ли я, возможно, скопировать весь каталог / sys или / include или сравнить каталог / include моего источника и убедиться, что все файлы также находятся в каталоге назначения. И таким образом я могу избежать необходимости компилировать несколько раз.
Но тем не менее я продолжал копировать по одному файлу за раз. Последняя ошибка, которую я получил:
/home/sansari/tbt/tools/arm-eabi-4.7/bin/../lib/gcc/arm-eabi/4.7/include/stdint.h:3:26: fatal error: stdint.h: No such file or directory
И я смотрю в каталоге включения; Я вижу файл вызова stdint.h Что вы думаете об этом? Это имеет смысл для вас? Я смущен этой ошибкой. Как я могу получить эту ошибку, когда файл находится в каталоге. В основном, кажется, что make говорит, что этот файл не существует, когда он существует.
Я также нашел этот пост, который, кажется, говорит то, что вы говорите. Мне просто нужно знать, как лучше всего это решить.
@ Олаф - Я очень ценю твою помощь. Я смог справиться со всеми ошибками библиотеки, поместив оператор включения в мой make-файл. Теперь компоновщик выдает мне следующие ошибки:
/home/sansari/tbt/tools/arm-eabi-4.7/bin/arm-eabi-gcc -I../../ndk/android-ndk-r10d/platforms/android-19/arch-arm/usr/include hello.c -o hello
/home/sansari/tbt/tools/arm-eabi-4.7/bin/../lib/gcc/arm-eabi/4.7/../../../../arm-eabi/bin/ld: cannot find crt0.o: No such file or directory
/home/sansari/tbt/tools/arm-eabi-4.7/bin/../lib/gcc/arm-eabi/4.7/../../../../arm-eabi/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
make: *** [hello] Error 1
обновление - я искал решение для вышеуказанных ошибок. Первая ошибка обсуждается здесь, и ключ -nostartfiles, похоже, пока работает для меня. Я нашел эту ссылку, которая говорит о том, что libc.a является исправлением ошибки, связанной с отсутствием -lc. Поэтому я нашел подходящую копию libc.a и передал расположение компоновщику. Программа компилируется, но я получаю последнее предупреждение следующим образом:
warning: cannot find entry symbol _start; defaulting to 00000000000080dc
Для этого по этой ссылке предлагается использовать ключ --entery-main. Так что теперь у меня есть исполняемый файл. Я хочу еще раз поблагодарить вас. Если вы обнаружите какие-либо проблемы в том, что я сделал, пожалуйста, напишите что-нибудь для меня. мне понадобится время, чтобы получить этот исполняемый файл на моем устройстве.