【问题标题】:how to include a native library that use posix headers in android ndk如何在 android ndk 中包含使用 posix 标头的本机库
【发布时间】:2012-07-04 09:26:39
【问题描述】:

我必须在 android ndk 项目中包含一个使用 System V IPC 的静态原生库 (dsplink.a)。

在 android.mk 中包含我的库,

    LOCAL_LDLIBS := ($MY-PATH)/dsplink.a

给出以下错误:

    _sync_usr.c:(.text+0x24b4): undefined reference to `semget'
    _sync_usr.c:(.text+0x24d4): undefined reference to `__errno_location'
    _sync_usr.c:(.text+0x24f4): undefined reference to `semget'
    _sync_usr.c:(.text+0x2538): undefined reference to `semctl'

semctl,semget,.. 函数包含在 sys/sem.h 中。 有没有办法包含库?

【问题讨论】:

    标签: android-ndk native static-libraries apk


    【解决方案1】:

    遗憾的是这是不可能的。

    从 android-ndk-r8/docs/system/libc/SYSV-IPC.html 中提取

    Android 不支持 System V IPC,即由 以下标准 Posix 标头:

    <sys/sem.h>   /* SysV semaphores */
    <sys/shm.h>   /* SysV shared memory segments */
    <sys/msg.h>   /* SysV message queues */
    <sys/ipc.h>   /* General IPC definitions */
    

    这样做的原因是,在设计上,它们会导致全球 内核资源泄漏。

    【讨论】:

    • 感谢您的回复。我可以使用相同的库创建一个可执行的 'hello' 并在终端中以 ./hello 的形式运行它。它工作得很好。有没有办法创建一个 apk 文件和以同样的方式运行。
    • 如何创建可执行文件(NDK?)以及在哪个终端运行它? (亚行外壳?)
    • 我已经使用我的板兼容工具链创建了可执行文件。我在连接到主机 ubuntu PC(在 minicom 中)的串行端口终端中运行可执行文件。
    • 好吧,这是可能的,但你不能将这个库与 Android NDK 的仿生库一起使用...
    • 我已将 android NDK 中的 libc.so 替换为我的 rootfs 中的 libc.so。但它会导致相同的错误..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多