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

Мне нужно создать статическую библиотеку из последней версии libpcap и «включить» ее в исходный код C для кросс-компиляции для архитектуры ARM-v7-a (Nexus One).

Я пытался в течение нескольких дней, надеюсь, кто-то может дать мне подсказку.

И я не могу использовать ни функции NDK, ни функции Java-обертки. Это должно быть так:

$ -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, но я действительно не понимаю... Заранее спасибо

РЕДАКТИРОВАНИЕ – РЕШЕНО. Как и сказал auselen, я пробовал использовать автономную цепочку инструментов 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 с помощью следующей команды: данная статическая библиотека libpcap.a. - person Cob013; 18.02.2013
comment
@ Rob013 Роб013 Я видел это твое замечание в нескольких местах о одиночной команде. Я не понимаю, что вы можете использовать NDK в другой среде с помощью одной команды, это возможно, и я имею в виду автономную цепочку инструментов. - person auselen; 18.02.2013