Ошибки компоновки в libpcap при компиляции ndk для android - PullRequest
3 голосов
/ 28 марта 2011

Я загрузил libpcap во внешнюю папку из исходного кода Android с помощью Git и репозитория.Я использовал набор инструментов ndk (android-ndk-r5b) для компиляции библиотеки, выполнив следующие шаги:

. / Configure --prefix = path-to-android-src / mydroid / prebuilt / linux-x86 /toolchain / arm-eabi-4.4.3 / bin make clean make make install

и затем создается файл libpcap.a.

Я сделал простой сниффер, используя libpcap (sniffer.c).Когда я пытаюсь скомпилировать его, возникают следующие ошибки: agcc sniffer.c libpcap.a

sniffer.c:9:18: error: pcap.h: No such file or directory
sniffer.c:19: warning: 'struct pcap_pkthdr' declared inside parameter list
sniffer.c:19: warning: its scope is only this definition or declaration, which is      probably not what you want
sniffer.c: In function 'processPacket':
sniffer.c:23: warning: incompatible implicit declaration of built-in function 'printf'
sniffer.c:24: error: dereferencing pointer to incomplete type
sniffer.c:26: error: dereferencing pointer to incomplete type
sniffer.c:33: error: dereferencing pointer to incomplete type
sniffer.c: In function 'main':
sniffer.c:45: error: 'pcap_t' undeclared (first use in this function)
sniffer.c:45: error: (Each undeclared identifier is reported only once
sniffer.c:45: error: for each function it appears in.)
sniffer.c:45: error: 'descr' undeclared (first use in this function)
sniffer.c:46: error: 'PCAP_ERRBUF_SIZE' undeclared (first use in this function)
sniffer.c:62: warning: incompatible implicit declaration of built-in function 'printf'
sniffer.c:66: warning: incompatible implicit declaration of built-in function 'fprintf'
sniffer.c:66: error: 'stderr' undeclared (first use in this function)
sniffer.c:72: warning: incompatible implicit declaration of built-in function 'fprintf'

, когда я пытаюсь создать объектный код заранее: agcc -c sniffer.o sniffer.c те же ошибкиПроизошло.

Может кто-нибудь объяснить мне, как решить эту проблему?

вот псевдоним agcc, который я использую в файле bashrc: ./configure --prefix = / home / petsas / projects /mobile-attack / mydroid / prebuilt / linux-x86 / toolchain / arm-eabi-4.4.3 / bin /

Кроме того, я приложил файл с выходными данными вышеприведенных команд: настройка, сборка и изготовлениеустановить.

(Я поместил ошибки в стиле кода, потому что были ошибки выравнивания)

Заранее спасибо!

- обновление -

Я использовал опции -I и -L, чтобы указать файлы включения и библиотеки, и эти ошибки теперь исчезли.

Вот мой новый журнал ошибок:

agcc --static -I /home/petsas/projects/mobile-attacks/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/include -L /home/petsas/projects/mobile-attacks/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/lib -o sniffer sniffer.c libpcap.a

/home/petsas/projects/mobile-attacks/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: libpcap.a(pcap-linux.o): Relocations in generic ELF (EM: 3)
/home/petsas/projects/mobile-attacks/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: libpcap.a(pcap-linux.o): Relocations in generic ELF (EM: 3)
/home/petsas/projects/mobile-attacks/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: libpcap.a(pcap-linux.o): Relocations in generic ELF (EM: 3)
libpcap.a: could not read symbols: File in wrong format
collect2: ld returned 1 exit status

любые идеи

1 Ответ

3 голосов
/ 30 марта 2011

Заголовок

Я не смог найти решение, следуя описанному выше способу, но я сделал это, написав файл Android.mdk и используя ndk-сборку Android NDK.

Я поместил директиву libpcap в android-ndk-r5b / samples, немного изменил Android.mdk и структуру direcotry, чтобы они выглядели как другие в каталоге samples, и я использовал ndk-Команда build внутри директории android-ndk-r5b:

ndk-build -C samples / android-ndk-r5b

Все работало нормально!Я смог создать файл libpicap.so и положить его в телефон с помощью команд:

                 in android (phone):
                 $ su
                 # mount -o,rw remount /dev/block/mtdblock4 /system/lib

                 in my Desktop:
                 $ adb push libpcap.so /system/lib/

Я сделал простой сниффер, скомпилировал и связал с libpcap.so и прекрасно работает в моемHTC Hero!;)

...