【问题标题】:Android NDK build error . do not found libcutils.soAndroid NDK 构建错误。没有找到 libcutils.so
【发布时间】:2013-11-20 02:53:06
【问题描述】:

我想构建 expolid 代码 (https://github.com/revolutionary/zergRush/blob/master/zergRush.c)

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := zergRush
LOCAL_SRC_FILES := zergRush.c
base :=E:\0.Android\system\core
#//base path include the android source code. but i forget the version .maybe 4.0.1
LOCAL_C_INCLUDES :=$(base)/include/
LOCAL_LDLIBS    := -llog -lcutils
LOCAL_STATIC_LIBRARIES := libcutils libc
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := eng debug
LOCAL_FORCE_STATIC_EXECUTABLE := true

include $(BUILD_EXECUTABLE)

这台电脑已经安装了ndk-r9b。
libcutils.so : D:\android-ndk-r9b\platforms\android-19\arch-arm\usr\lib\rs
所以我将它复制到 D:\android-ndk-r9b\platforms\android-19\arch-arm\usr\lib。

default.properties project.properties 设置目标=19

但是 ndk-build 失败了。

D:\test\roottest\jni>ndk-build
[armeabi] Compile thumb  : zergRush <= zergRush.c
[armeabi] Executable     : zergRush
D:/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6
/../../../../arm-linux-androideabi/bin/ld.exe: error: cannot find -lcutils
D:/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6
/../../../../arm-linux-androideabi/bin/ld.exe: D:/test/roottest//obj/local/armeabi/objs/zergRush/zergRush.o: in function
 do_fault:D:/test/roottest//jni/zergRush.c:226: error: undefined reference to 'socket_local_client'
D:/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6
/../../../../arm-linux-androideabi/bin/ld.exe: D:/test/roottest//obj/local/armeabi/objs/zergRush/zergRush.o: in function
 main:D:/test/roottest//jni/zergRush.c:488: error: undefined reference to 'property_set'
D:/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6
/../../../../arm-linux-androideabi/bin/ld.exe: D:/test/roottest//obj/local/armeabi/objs/zergRush/zergRush.o: in function
 main:D:/test/roottest//jni/zergRush.c:619: error: undefined reference to 'property_get'
collect2: ld returned 1 exit status
make.exe: *** [D:/test/roottest//obj/local/armeabi/zergRush] Error 1

我想知道如何包含使用定义的库路径或包含 libcutils.so,我可以制作程序。谢谢。

【问题讨论】:

    标签: android-ndk makefile ndk-build


    【解决方案1】:

    project.properties 文件中的正确语法是target=android-19。确保你拥有它。如果您想确保它可以正常工作,请在 Eclipse 中打开您的项目,右键单击它并选择打开其属性。

    此外,您已在 makefile 中将 libcutils 列为共享库和静态库。 libc 也是 Android 系统中的共享库,所以我很确定您应该不使用整个 LOCAL_STATIC_LIBRARIES 行。

    如果修复目标仍然不起作用,我的建议是将 libcutils.so 添加为“预构建”库(检查您的 &lt;ndk&gt;/docs/PREBUILTS.html 文件以了解如何执行此操作)。

    祝你好运!

    【讨论】:

    • e,是的 target=android-19 。我做到了。你能制作 zergRush.c 吗?我想看看你的makefile。谢谢。
    • 嗨。我又读了一遍。并找到制作提示。使用 'agcc' 。还有一个博客blog.claudxiao.net/2011/10/android_agcc。我成功了! .但是.... zergRush 仅适用于 android 源代码 (2.2 2.3)。只有 4.1.2 。虽然取得成功。当我运行它时,它被Android系统杀死了......而且我在中国。所以防火墙使得无法获得更多的android源。 ----------------- 非常感谢。
    • 酷。这都是因为 libcutils.so(以及它导出的头文件)不是 Android NDK 开发包的一部分。它只能从 Android 的源代码中获得。无论如何感谢您的讨论。
    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2012-12-13
    • 2014-02-21
    相关资源
    最近更新 更多