статичен libpcap в кръстосано компилиран Android arm-v7-a C код

Трябва да създам статична библиотека от най-новия libpcap и да я „включа“ в изходен код на C, за да бъде кръстосано компилиран за архитектура ARM-v7-a (Nexus One).

Опитвам се от дни, надявам се някой да ми даде съвет.

И аз не мога да използвам нито NDK, нито Java-wrapper функции. Трябва да е като:

$ -o prog prog.c [-options] и по-късно ще мога да избутам изпълнимия файл чрез adb.

Опитах с CodeSourcery и arm-linux-gnueabi, инсталиран чрез apt-get (аз съм на Kubuntu Linux), нищо не работи правилно.

Най-многото, което успях да постигна, е глупав просто helloworld файл чрез:

arm-linux-gnueabi-gcc -static -o prog prog.c

който се изпълнява под моя смартфон.

Имате ли представа за това, че мога да получа по-сложна програма, включително libpcap? Мисля, че трябва да се справи с .a или .so файлове в директорията libpcap, но наистина не го разбирам... Благодаря предварително

РЕДАКТИРАНЕ - РЕШЕНО: Точно както каза Ауселен, опитах с NDK самостоятелна инструментална верига и успях.

Ето какво направих, в случай че някой има същите проблеми:

1) Изтеглете Android SDK и NDK (последният е във версия r8d в момента)

2) Отидете в папката NDK и въведете

cd компилация/инструменти

make-standalone-toolchain.sh --platform=android-3 --install-dir=$HOME/new_toolchain --ndk-dir=ВАШИЯ_NDK_PATH

cd $HOME/new_toolchain

(Поставих моя helloworld.c файл в тази папка, но разбира се можете да добавите PATH към вашия .bashrc файл за по-голяма ефективност)

bin/arm-linux-androideabi-gcc helloworld.c -o helloworld

3) бутнете го в устройството си чрез adb.

Вече всичко работи :) благодаря отново


person Cob013    schedule 12.02.2013    source източник


Отговори (1)


Тъй като Android използва различно време за изпълнение (бионично), все още е най-добре да използвате NDK, който има необходимите компоненти за съответното свързване на вашето приложение.

NDK ви позволява да го стартирате като самостоятелна верига от инструменти, така че можете директно да инициирате gcc чрез неговата функция sysroot.

Важен съвет е да не използвате ~ в тези пътища, посочени при извикване на gcc, не е толкова приятелски.

person auselen    schedule 13.02.2013
comment
Благодаря, auselen за отговора. За съжаление моят проект трябва да работи с директна и единична конзолна команда за фаза на кръстосано компилиране. По-конкретно успях да компилирам малък снифър за трафик с помощта на libpcap с тази команда: ›arm-none-linux-gnueabi-gcc -o prog -static -Llib prog.c -Ilibpcap-1.2.1/ -lpcap с помощта на дадено libpcap.a статична библиотека. - person Cob013; 18.02.2013
comment
@Rob013 Видях това твое мнение на няколко места за единична команда. Нещо, което не разбирам е, че можете да използвате NDK в друга среда с една команда, това е възможно и какво имам предвид под самостоятелна верига от инструменти. - person auselen; 18.02.2013