1、gcc
.c文件编程成so文件
1、将这几个文件编译成一个动态库:libtest.so$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
2、设置动态链接库的路径$ export LD_LIBRARY_PATH=/home/yingkun_che/桌面/ndk
3、将test.c与动态库libtest.so链接生成执行文件test:$ gcc test.c -L. -ltest -o test
4、测试是否动态连接,如果列出libtest.so,那么应该是连接正常了$ ldd test
5、指定so文件的bitgcc test_a.c test_b.c test_c.c -fPIC -shared -m32 -o libtest.so
gcc test.c -L. -ltest -m32 -o test
如报错,需要下载支持库链接如下
ubuntu x64下编译出现找不到 cdefs.h / c++config.h 的问题_sfdazsdf的博客-CSDN博客_缺失头文件bit/c++config.h
参数:
-shared该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。gcc编译参数-fPIC的一些问题_逐鹿之城的博客-CSDN博客_-fpic 编译参数的作用
-L.:表示要连接的库在当前目录中
-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称
LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。
参考链接:Linux下gcc编译生成动态链接库*.so文件并调用它 - richyhuang - 博客园
2、ndk-build
2.1、编写android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#生成so库的名字
LOCAL_MODULE := jni_demo
#源码文件
LOCAL_SRC_FILES:= \
test.c \
test_a.c \
test_b.c \
test_c.c
include $(BUILD_SHARED_LIBRARY)
2.2、Application.mk配置使用的android版本号和生成的so类型
APP_PLATFORM := android-26
#APP_ABI := arm64-v8a armeabi-v7a armeabi x86 x86_64
APP_ABI := all
2.3、ndk-build/usr/lib/sdk/android-sdk-linux/ndk-bundle/ndk-build
2.4、编译结果
如上图,在jni下运行2.3中的命令,生成libs包
3、android studio cmake
【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件 - HaiyuKing - 博客园
studio自己集成了nkd开发工具,在创建项目的时候就可以选择Include C++ support
build之后生成的so文件位于
多个.cpp文件
CMakeList配置之编译多个.cpp文件__shampoo_的博客-CSDN博客
多个so
Android使用cmake控制多个cpp生成多个so文件_萌萌哒啊啊啊啊的博客-CSDN博客_android cmake编译多个so
4、android studio build.gradle
Android NDK开发之从环境搭建到Demo级十步流 - 管满满 - 博客园
不生成so的问题Android NDK 怎么也生成不了so文件_天使乱红的博客-CSDN博客
本地实际测试,3.2版本使用如上方式配置也不会生成so文件
Android NDK Gradle3.0 以上最新生成.so之旅_xiaozhu0922的博客-CSDN博客_gradle生成so
studio高版本不再支持android.useDeprecatedNdk,建议使用cmake或者ndk-build。