2 Stimmen

Libpcap statische Verknüpfungsfehler beim Kompilieren mit NDK-Toolchains für Android

Ich habe die libpcap im externen Ordner aus dem Android-Quellcode heruntergeladen, indem ich Git und Repo verwendet habe. Ich habe die Toolchains des NDK (android-ndk-r5b) verwendet, um die Bibliothek zu kompilieren, indem ich folgende Schritte befolgt habe:

./configure --prefix=Pfad-zum-android-src/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin make clean make make install

und dann wird eine Datei libpcap.a erstellt.

Ich habe einen einfachen Sniffer mit libpcap erstellt (sniffer.c). Wenn ich versuche, ihn zu kompilieren, treten diese Fehler auf: agcc sniffer.c libpcap.a

sniffer.c:9:18: Fehler: pcap.h: Datei oder Verzeichnis nicht gefunden
sniffer.c:19: Warnung: 'struct pcap_pkthdr' deklariert im Parameterliste
sniffer.c:19: Warnung: ihr Gültigkeitsbereich ist nur diese Definition oder Deklaration, was wahrscheinlich nicht das Gewünschte ist
sniffer.c: In Funktion 'processPacket':
sniffer.c:23: Warnung: inkompatible implizite Deklaration der integrierten Funktion 'printf'
sniffer.c:24: Fehler: Dereferenzierung des Zeigers auf unvollständigen Typ
sniffer.c:26: Fehler: Dereferenzierung des Zeigers auf unvollständigen Typ
sniffer.c:33: Fehler: Dereferenzierung des Zeigers auf unvollständigen Typ
sniffer.c: In Funktion 'main':
sniffer.c:45: Fehler: 'pcap_t' nicht deklariert (erste Verwendung in dieser Funktion)
sniffer.c:45: Fehler: (Jede nicht deklarierte Bezeichner wird nur einmal gemeldet
sniffer.c:45: Fehler: für jede Funktion, in der es erscheint.)
sniffer.c:45: Fehler: 'descr' nicht deklariert (erste Verwendung in dieser Funktion)
sniffer.c:46: Fehler: 'PCAP_ERRBUF_SIZE' nicht deklariert (erste Verwendung in dieser Funktion)
sniffer.c:62: Warnung: inkompatible implizite Deklaration der integrierten Funktion 'printf'
sniffer.c:66: Warnung: inkompatible implizite Deklaration der integrierten Funktion 'fprintf'
sniffer.c:66: Fehler: 'stderr' nicht deklariert (erste Verwendung in dieser Funktion)
sniffer.c:72: Warnung: inkompatible implizite Deklaration der integrierten Funktion 'fprintf'

wenn ich versuche, den Object-Code im Voraus zu erzeugen: agcc -c sniffer.o sniffer.c treten dieselben Fehler auf.

Kann mir jemand erklären, wie man dieses Problem lösen kann?

Hier ist der Alias von agcc, den ich in der bashrc-Datei verwende: ./configure --prefix=/home/petsas/projects/mobile-attacks/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/

Außerdem habe ich eine Datei mit den Ausgaben der obigen Befehle angehängt: ./configure, make und make install.

(Ich habe die Fehler im Code-Stil aufgeführt, weil es Fehler in der Ausrichtung gab)

Vielen Dank im Voraus!

-- Update --

Ich habe die Optionen -I und -L verwendet, um die Include- und Bibliotheksdateien anzugeben, und diese Fehler sind jetzt verschwunden.

Hier ist mein neues Fehlerprotokoll:

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): Umplatzierungen in generischem 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): Umplatzierungen in generischem 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): Umplatzierungen in generischem ELF (EM: 3)
libpcap.a: Konnte Symbole nicht lesen: Datei im falschen Format
collect2: ld gab 1 als Beendigungsstatus zurück

Irgendwelche Ideen?

2voto

Thanasis Petsas Punkte 4218

Überschrift

Den Lösungsweg, den ich beschrieben habe, konnte ich nicht finden, aber ich habe es geschafft, indem ich eine Android.mdk-Datei geschrieben habe und den ndk-build des Android NDK verwendet habe.

Ich habe das libpcap-Verzeichnis in die android-ndk-r5b/samples kopiert, ein wenig die Android.mdk-Datei angepasst und die Struktur des Verzeichnisses verändert, damit es wie die anderen im Samples-Verzeichnis aussieht, und dann den ndk-build-Befehl im android-ndk-r5b-Verzeichnis verwendet:

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

Alles hat gut funktioniert! Ich konnte eine libpicap.so-Datei erstellen und sie auf das Telefon übertragen mit den Befehlen:

                 auf dem Android-Telefon:
                 $ su
                 # mount -o,rw remount /dev/block/mtdblock4 /system/lib

                 auf meinem Desktop:
                 $ adb push libpcap.so /system/lib/

Ich habe einen einfachen Sniffer erstellt, kompiliert und mit libpcap.so verknüpft, und er funktioniert einwandfrei auf meinem HTC Hero! ;)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X