首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libpcap静态链接错误使用android的ndk工具链编译

libpcap静态链接错误使用android的ndk工具链编译
EN

Stack Overflow用户
提问于 2011-03-28 05:19:41
回答 1查看 2.6K关注 0票数 2

我已经使用Git和repo从android源代码下载了外部文件夹中的libpcap。我使用了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

代码语言:javascript
复制
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也出现了同样的错误。

有人能给我解释一下如何解决这个问题吗?

下面是我在bashrc文件中使用的agcc的别名:./configure --prefix=/home/petsas/projects/mobile-attacks/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/

此外,我还附加了一个文件,其中包含上述命令的输出: configure、make和make install。

(我将错误放在代码样式中,因为存在对齐错误)

提前谢谢你!

-更新--

我使用了选项-I和-L来指定包含文件和库文件,现在这些错误都消失了。

这是我的新错误日志:

代码语言:javascript
复制
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

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-30 22:07:54

标题

我无法按照上面描述的方式找到解决方案,但我通过编写Android.mdk文件和使用android NDK的ndk-build找到了解决方案。

我把libpcap目录放到android-ndk-r5b/samples中,我稍微修改了目录和目录的结构,以便看起来像samples目录中的其他目录,我在android-ndk-r5b目录中使用了ndk- Android.mdk命令:

ndk-构建-C示例/android-ndk-r5b

一切都很好!我能够生成一个libpicap.so文件,并使用以下命令将其放入手机:

代码语言:javascript
复制
                 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中完美地工作了!;)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5452532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档