一招一个文件解决ndk编译文件Android.mk配置的所有问题
2014-11-26 21:09
761 查看
我们以一个文件实例来说明,看如下配置:
此配置文件生成一个so文件,并链接了boost和openssl
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
LOCAL_PATH := $(call my-dir) #获取当前Android.mk文件的当前路径
include $(CLEAR_VARS) #清除所有变量
LOCAL_MODULE:= libcrypto_dynamic #外部模块名
LOCAL_SRC_FILES:= /cygdrive/D/android-ndk-r9d/sources/openssl-android/libs/armeabi/libcrypto.so
#模块要链接的外部so库文件
LOCAL_EXPORT_C_INCLUDES := /cygdrive/D/android-ndk-r9d/sources/openssl-android/include #模块导出的include路径,以后引用模块名后,则自动添加此包含目录
include $(PREBUILT_SHARED_LIBRARY) #声明一个预编译模块,并不编译为so库,上面的LOCAL_SRC_FILES必须为so文件
include $(CLEAR_VARS)
LOCAL_MODULE:= libssl_dynamic
LOCAL_SRC_FILES:= /cygdrive/D/android-ndk-r9d/sources/openssl-android/libs/armeabi/libssl.so
LOCAL_EXPORT_C_INCLUDES := /cygdrive/D/android-ndk-r9d/sources/openssl-android/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
#定义一个变量
#local_c_includes := \
# /cygdrive/D/android-ndk-r9d/sources/openssl-android \
# /cygdrive/D/android-ndk-r9d/sources/openssl-android/crypto/asn1 \
# /cygdrive/D/android-ndk-r9d/sources/openssl-android/crypto/evp \
# /cygdrive/D/android-ndk-r9d/sources/openssl-android/include \
#LOCAL_C_INCLUDES += $(local_c_includes) #添加其他include目录
LOCAL_MODULE := hello-jni #模块名
LOCAL_SRC_FILES := hello-jni.cpp #原文件名
LOCAL_WHOLE_STATIC_LIBRARIES += boost_system
#在本模块中引用外部boost_system静态库,注意:boost_system必须是LOCAL_MODULE 指定的名称
LOCAL_WHOLE_STATIC_LIBRARIES += boost_thread
#同上,并且LOCAL_WHOLE_STATIC_LIBRARIES链接静态库不会优化链接进来的静态库的代码
LOCAL_WHOLE_STATIC_LIBRARIES += boost_date_time
#LOCAL_STATIC_LIBRARIES与LOCAL_WHOLE_STATIC_LIBRARIES一样,但要优化链接进的静态库代码
LOCAL_SHARED_LIBRARIES += libcrypto_dynamic
#链接动态库so,并libcrypto_dynamic名必须是LOCAL_MODULE 指定的名称,并且会自动复制到本so库的目录
LOCAL_SHARED_LIBRARIES += libssl_dynamic
#LOCAL_LDLIBS += -lz #链接动态库,一般是链接系统的库用这个,并且不复制到本so库的目录
#LOCAL_LDLIBS += -ldl
include $(BUILD_SHARED_LIBRARY)
$(call import-module, boost_1_55_0) #导入 NDK/sources/boost_1_55_0目录的android.mk文件
所以,有了以上的解释,就可以完美的引用外部动态库so和静态库a文件了.
此配置文件生成一个so文件,并链接了boost和openssl
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
LOCAL_PATH := $(call my-dir) #获取当前Android.mk文件的当前路径
include $(CLEAR_VARS) #清除所有变量
LOCAL_MODULE:= libcrypto_dynamic #外部模块名
LOCAL_SRC_FILES:= /cygdrive/D/android-ndk-r9d/sources/openssl-android/libs/armeabi/libcrypto.so
#模块要链接的外部so库文件
LOCAL_EXPORT_C_INCLUDES := /cygdrive/D/android-ndk-r9d/sources/openssl-android/include #模块导出的include路径,以后引用模块名后,则自动添加此包含目录
include $(PREBUILT_SHARED_LIBRARY) #声明一个预编译模块,并不编译为so库,上面的LOCAL_SRC_FILES必须为so文件
include $(CLEAR_VARS)
LOCAL_MODULE:= libssl_dynamic
LOCAL_SRC_FILES:= /cygdrive/D/android-ndk-r9d/sources/openssl-android/libs/armeabi/libssl.so
LOCAL_EXPORT_C_INCLUDES := /cygdrive/D/android-ndk-r9d/sources/openssl-android/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
#定义一个变量
#local_c_includes := \
# /cygdrive/D/android-ndk-r9d/sources/openssl-android \
# /cygdrive/D/android-ndk-r9d/sources/openssl-android/crypto/asn1 \
# /cygdrive/D/android-ndk-r9d/sources/openssl-android/crypto/evp \
# /cygdrive/D/android-ndk-r9d/sources/openssl-android/include \
#LOCAL_C_INCLUDES += $(local_c_includes) #添加其他include目录
LOCAL_MODULE := hello-jni #模块名
LOCAL_SRC_FILES := hello-jni.cpp #原文件名
LOCAL_WHOLE_STATIC_LIBRARIES += boost_system
#在本模块中引用外部boost_system静态库,注意:boost_system必须是LOCAL_MODULE 指定的名称
LOCAL_WHOLE_STATIC_LIBRARIES += boost_thread
#同上,并且LOCAL_WHOLE_STATIC_LIBRARIES链接静态库不会优化链接进来的静态库的代码
LOCAL_WHOLE_STATIC_LIBRARIES += boost_date_time
#LOCAL_STATIC_LIBRARIES与LOCAL_WHOLE_STATIC_LIBRARIES一样,但要优化链接进的静态库代码
LOCAL_SHARED_LIBRARIES += libcrypto_dynamic
#链接动态库so,并libcrypto_dynamic名必须是LOCAL_MODULE 指定的名称,并且会自动复制到本so库的目录
LOCAL_SHARED_LIBRARIES += libssl_dynamic
#LOCAL_LDLIBS += -lz #链接动态库,一般是链接系统的库用这个,并且不复制到本so库的目录
#LOCAL_LDLIBS += -ldl
include $(BUILD_SHARED_LIBRARY)
$(call import-module, boost_1_55_0) #导入 NDK/sources/boost_1_55_0目录的android.mk文件
所以,有了以上的解释,就可以完美的引用外部动态库so和静态库a文件了.
相关文章推荐
- 解决android-ndk-r8c 编译所有文件问题
- 解决android-ndk-r8c 总是编译所有文件问题
- 解决android-ndk-r8c 编译所有文件问题
- 解决Android source code编译时,遇到的一个JDK配置问题
- 一个使用FFmpeg库读取3gp视频的例子-Android中使用FFmpeg媒体库(三).so文件编译过程问题的解决
- 使用ec编译cocos项目是出现Android.mk文件报错Are you sure your NDK_MODULE_PATH variable is properly defined 的解决办法
- 做一个懒cocos2d-x程序猿(一)停止手打所有cpp文件到android.mk
- 一个命令行解决U盘所有文件(夹)被隐藏问题
- cocos2d-x 交叉编译,维护mk文件的“万能”配置解决(转载)
- 解决:eclipse中双击一个变量,文件中所有这个变量都会变成黄色,现在变不了了的问题。
- 做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk
- 我把一个VC6的工程转换为VS2008的工程后,编译总是出现找不到而且不能升级vc90.pdb文件的问题,error C2471--解决办法 2010-9-16 15:01
- 合并Dev控件包为一个独立的包,解决带皮肤后编译文件过大问题
- ndk编译时出现:*** 目标文件“clean”含有 : 和 :: 两种条目 问题的解决方法
- Android studio NDK 配置编译本地库(so文件)
- Android.mk文件编写以及import-module的注意事项与NDK_MODULE_PATH的配置
- 添加文件【COCOS2DX-LUA 脚本开发之十三】解决lua项目编译Android出现get data from file failed、Cocos2dxActivity cannot be 路径等问题
- 解决不使用Android NDK编译的bin文件No such file or directory问题
- Android编译系统中头文件搜索路径顺序的一个问题
- 一个VC6的工程转换为VS2008的工程后,编译找不到而且不能升级vc90.pdb文件的问题解决方法 2010-9-28 14:00