【问题标题】:Android NDK: Compiling errors using libpcap for Android - functions "not declared in this scope"Android NDK:使用 libpcap for Android 编译错误 - 函数“未在此范围内声明”
【发布时间】:2011-03-29 17:58:37
【问题描述】:

我正在尝试将 Jnetpcap(带有 JNI 的 libpcap 的 java 包装器)移植到 Android。我已经设法使用此存储库中的源代码将 libpcap 编译为静态库:https://github.com/android/platform_external_libpcap 并且我获得了 libpcap.a

当尝试将 Jnetpcap 编译为共享库(并与 libpcap.a 链接)时,我遇到了错误,因为某些 libpcap 的函数“未在此范围内声明”。 这些函数是:pcap_create()、pcap_activate()、pcap_can_set_rfmon()、pcap_set_buffer_size()、pcap_set_promisc()、pcap_set_snaplen() 和 pcap_set_timeout()。

这些函数存在于 libpcap 的原始版本(包 libpcap-dev 提供的那个)中,但似乎 android 的版本没有它们。相同的Jnetpcap源文件可以编译到intel x86和x64平台上没有问题。

我做错了吗?这些功能真的没有了吗?

我希望你们中的任何人都知道如何解决这个问题。谢谢。

【问题讨论】:

    标签: android compiler-errors libpcap android-ndk


    【解决方案1】:

    不幸的是,libpcap 0.9.8 版似乎不支持这些功能。版本 >= 1.0.0 包含它们。所以现在你有两种可能性。通过稍微修改旧版本的 Android.mk 以包含新文件来编译新版本的 libpcap。或者将 jnetpcap 降级到支持旧 libpcap 的版本。 Libpcap 0.9.8 如果从 2007 年开始,那么您也应该从今年左右选择 jnetpcap。

    【讨论】:

    • 感谢您的帮助。我降级到 Jnetpcap 1.2,它与 libpcap 0.9.8 一起工作。我正在做一些测试,但似乎我有一个适用于 Android 的 Jnetpcap 1.2 的工作端口。它不支持实时捕获,因为该应用程序不能以 root 身份运行,但解析功能应该可以很好地工作。
    • @Jimix 我正在尝试在 Android 9(armhf 板)上使用 jnetpcap,请问您是如何移植的?我找不到交叉编译 jnetpcap 的方法:s
    • @Jimix 你是否设法在没有root权限的情况下捕获数据包?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2017-02-20
    • 2013-03-05
    • 2011-10-08
    相关资源
    最近更新 更多