如何在带NDK C++支持的Android项目中配置Curl库完成编译
解决步骤
1. 整理文件存放路径
- 头文件放置:将libcurl对应的
include文件夹(内部需包含curl/curl.h的目录结构)放到app/src/main/cpp目录下,最终完整路径为app/src/main/cpp/include/curl/curl.h - 动态库存放:在
app/src/main目录下新建jniLibs文件夹,再在jniLibs下新建arm64-v8a子文件夹,将所有arm64架构的.so文件(含libcurl.so及其依赖库)全部放入app/src/main/jniLibs/arm64-v8a目录中
2. 修改CMakeLists.txt配置(app模块cpp目录下的CMake配置文件)
你需要在原有配置基础上新增以下内容:
2.1 配置头文件搜索路径
添加这行代码让编译器能找到curl头文件:
include_directories(${CMAKE_SOURCE_DIR}/include)
${CMAKE_SOURCE_DIR}指代当前CMakeLists.txt所在的目录,默认就是app/src/main/cpp
2.2 导入预编译的libcurl库
# 声明libcurl为预编译共享库 add_library( libcurl SHARED IMPORTED ) # 指定libcurl.so的实际存放路径 set_target_properties( libcurl PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/arm64-v8a/libcurl.so )
如果有其他依赖的.so库,你需要按照上面的格式,为每个库都新增对应的add_library和set_target_properties配置
2.3 关联依赖库
找到target_link_libraries配置段,将libcurl添加到依赖列表中,示例如下:
target_link_libraries( # 此处替换为你自己的原生库名称,默认生成的示例项目为native-lib native-lib # 新增libcurl依赖 libcurl # 原有系统依赖库保持不变即可 android log)
3. 修改app模块build.gradle配置
找到android > defaultConfig块,新增ndk架构过滤配置,避免编译其他架构时找不到库报错:
ndk { abiFilters 'arm64-v8a' }
4. 验证生效
同步项目后执行Clean -> Rebuild,#include <curl/curl.h>的找不到报错就会消失,项目可正常编译。
内容的提问来源于stack exchange,提问作者androidneil
相关产品推荐
相关产品推荐

