статическое связывание файла c с библиотекой android bionic c

Я только что написал небольшой файл c и его заголовочный файл. dev_access.c и dev_access.h

Я хочу связать его с бионической библиотекой в ​​Android и создать статически/динамически связанный файл архива.

Мои файлы находятся в /home/preetam/mydev/ Исходники Android находятся в /home/preetam/android_source

Ниже приведен мой текущий make-файл.

CROSS           := /home/preetam/bin/CodeSourcery/arm2010/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi
CC              := $(CROSS)-gcc
INC_DIR         := /home/preetam/android_source/bionic/libc
CFLAGS          := -Wall -c -I$(INC_DIR)/include

android_hal: dev_access.o
        ${CC} ${CFLAGS} dev_access.c -o dev_access.a

clean:
        rm -f *.o dev_access.a

Я не уверен, что происходит не так, но файлы заголовков не связываются, и возникают некоторые ошибки переопределения и отсутствия. Ниже приведен вывод консоли:

/home/preetam/bin/CodeSourcery/arm2010/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc -c -Wall -I/home/preetam/android_source/bionic/libc/include -static   -c -o dev_access.o dev_access.c
In file included from /home/preetam/android_source/bionic/libc/include/stdio.h:42,
                 from dev_access.c:1:
/home/preetam/android_source/bionic/libc/include/sys/_types.h:40: fatal error: machine/_types.h: No such file or directory
compilation terminated.
make: *** [dev_access.o] Error 1

Прежде всего, правильный ли мой Makefile? Как правильно связать ваши программы с bionic libc? Как сделать конечный объект архивом?


person preetam    schedule 14.05.2014    source источник
comment
Я думаю, вам нужен ar, чтобы связать dev_access.o с lib dev_access.a.   -  person Jiminion    schedule 14.05.2014
comment
ar libdev_access.a dev_access.o   -  person Jiminion    schedule 14.05.2014
comment
Я не могу заставить make скомпилироваться. Я не уверен, что нужно включить. Также я не уверен, нужен ли мне скомпилированный бионик или достаточно исходного кода.   -  person preetam    schedule 14.05.2014
comment
Эта ошибка, похоже, возникает из-за включения самого stdio.h.   -  person preetam    schedule 14.05.2014
comment
Вам нужно найти машину/... и поместить ее в свой путь включения.   -  person Jiminion    schedule 14.05.2014
comment
Вы должны использовать следующие включаемые пути: libc/arch-$ARCH/include libc/include libc/kernel/common libc/kernel/arch-$ARCH   -  person Jiminion    schedule 14.05.2014
comment
Включение папки машины создает множество ошибок переопределения среди включаемых файлов.   -  person preetam    schedule 14.05.2014
comment
Мне удалось получить компиляцию libc.a. Можете ли вы сказать мне, как статически связать с ним. пожалуйста, дайте мне сделать команды для него.   -  person preetam    schedule 14.05.2014
comment
Спасибо за список файлов для включения. Как оказалось, я не учел файлы common и kernel/arch-arm. Поскольку я кросс-компилировал для arm, команда «ar» не работает. Выдает 'ar: недопустимая опция --e' Но на самом деле я использовал ту же команду без каких-либо аргументов. Не прошел -е вообще.   -  person preetam    schedule 14.05.2014
comment
@ Джим Спасибо за всю помощь. Наконец-то я понял.   -  person preetam    schedule 14.05.2014
comment
Молодец! Рад, что ты понял.   -  person Jiminion    schedule 14.05.2014


Ответы (1)


Вы должны использовать эти пути включения для бионических:

libc/arch-$ARCH/include 
libc/include 
libc/kernel/common 
libc/kernel/arch-$ARCH

ar может иметь некоторые переключатели для этого...

РЕДАКТИРОВАТЬ: переключатель cr

ar -crv <libname> <source_object>
person Jiminion    schedule 14.05.2014