Android---NDK编译静态库失败

http://blog.csdn.net/andyhuabing/article/details/7676760

 

Android---NDK编译静态库失败


Android.mk 相关编译文件:
include $(CLEAR_VARS)
LOCAL_MODULE    := libdvnca


LOCAL_SRC_FILES := \
src/dvn_cak.c \


LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/inc \


LOCAL_CFLAGS += -D__ANDROID__ -DTEST_IPANEL -DUSE_GRAPHICS_PIXEL_ALPHA -DHAVE_GFX_2D
include $(BUILD_STATIC_LIBRARY)
#include $(BUILD_SHARED_LIBRARY)


项目编译成动态库是正常的,将Android.mk里面的最后include $(BUILD_SHARED_LIBRARY)改成
include $(BUILD_STATIC_LIBRARY)编译静态库,运行NDK-BUILD却一点反应都没有,一闪而过。


从控制台中看:
Your group is currently "mkpasswd".  This indicates that
the /etc/passwd (and possibly /etc/group) files should be rebuilt.
See the man pages for mkpasswd and mkgroup then, for example, run
mkpasswd -l [-d] > /etc/passwd
mkgroup  -l [-d] > /etc/group
Note that the -d switch is necessary for domain users.
cygwin warning:
  MS-DOS style path detected: C:\NDK\android-ndk-r6b/ndk-build
  Preferred POSIX equivalent is: /cygdrive/c/NDK/android-ndk-r6b/ndk-build
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames


根本就没有编译源文件,而编译动态库就会有:
Compile thumb  : dvnca <= dvn_cak.c
SharedLibrary  : libdvnca.so
Install        : libdvnca.so => libs/armeabi/libdvnca.so




解决办法有两种:
1、在Android.mk并行目录增加 Application.mk

文件内容:
APP_ABI := armeabi
APP_PLATFORM := android-9
APP_MODULES := libdvnca


2、在Android.mk中增加使用静态库的编译选项
include $(CLEAR_VARS)
LOCAL_MODULE    := libdvnca


LOCAL_SRC_FILES := \
src/dvn_cak.c \


LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/inc \


LOCAL_CFLAGS += -D__ANDROID__ -DTEST_IPANEL -DUSE_GRAPHICS_PIXEL_ALPHA -DHAVE_GFX_2D
include $(BUILD_STATIC_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE    := test
LOCAL_STATIC_LIBRARIES := libdvnca
LOCAL_CFLAGS += -D__ANDROID__ -DTEST_IPANEL -DUSE_GRAPHICS_PIXEL_ALPHA -DHAVE_GFX_2D
include $(BUILD_SHARED_LIBRARY)


如此控制台输入的打印为:
StaticLibrary  : libdvnca.a
SharedLibrary  : libtest.so

Install        : libtest.so => libs/armeabi/libtest.so

 

NDK 是一个工具集,可以帮助开发者在 Android 上编写本地 C/C++ 代码。使用 NDK 编写的代码可以被编译为动态库或静态库。 下面是编译静态库的步骤: 1. 在 Android Studio 中创建一个新的 C/C++ 模块(File > New > New Module > C/C++ Library)。 2. 在“New Module”对话框中,选择“Static library”并填写相关信息。 3. 在“C++”选项卡中,配置 C++ 源代码和头文件。 4. 在“Gradle”选项卡中,配置 Gradle 构建脚本。 5. 在 Gradle 文件中,设置以下参数: ``` android { defaultConfig { externalNativeBuild { cmake { cppFlags "-std=c++11" arguments "-DANDROID_STL=c++_static" } } } externalNativeBuild { cmake { path "CMakeLists.txt" } } } ``` 其中,cppFlags 参数指定编译器标志,-std=c++11 表示使用 C++ 11 标准;arguments 参数指定编译参数,-DANDROID_STL=c++_static 表示使用静态链接的 C++ 标准库。 6. 在 src/main 目录下创建 CMakeLists.txt 文件,并编写编译命令。 ``` cmake_minimum_required(VERSION 3.4.1) add_library( native-lib STATIC native-lib.cpp ) target_link_libraries( native-lib android log ) ``` 其中,add_library 命令用于创建一个静态库;target_link_libraries 命令用于链接系统库。 7. 点击“Sync Now”按钮同步 Gradle 文件。然后,编译并构建项目(Build > Make Project)。 8. 在 build/intermediates/cmake 目录下可以找到编译生成的静态库文件。 注意:以上步骤是使用 CMake 编译静态库的示例。如果您使用其他构建系统,如 ndk-build,您需要按照相应的方法进行配置和编译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值