使用CMake在Linux下编译tinyxml静态库

本文介绍如何在CentOS6.6环境下使用CMake工具编译tinyxml_2_6_21静态库。步骤包括下载解压源码包、创建配置CMakeLists.txt文件、删除不必要的测试文件、使用CMake编译以及获取最终的libtinyxml.a文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:CentOS6.6+tinyxml_2_6_2
1.下载并解压tinyxml_2_6_2.zip

unzip tinyxml_2_6_2.zip



2.在tinyxml文件夹里创建一个CMakeLists.txt文件,并将内容设置为

cmake_minimum_required(VERSION 2.8)

project(TinyXMLLIB)

include_directories(./)

aux_source_directory(./ LIB_SRCS)

#add_definitions(-DTIXML_USE_STL) #如果需要使用TIXML_USE_STL宏进行编译,则将这一句开启

add_library(tinyxml STATIC ${LIB_SRCS})



3.因为我们不需要编译测试程序,所以要将xmltest.cpp文件删除掉

rm -rf ./xmltest.cpp



4.使用cmake工具进行编译

cmake -DCMAKE_BUILD_TYPE=Release ./
make



5.在当前目录下就会生成一个libtinyxml.a文件



6.除了使用cmake工具之外,也可以直接修改自带的Makefile文件来完成,不过看起来稍微复杂些。
可参看这里==>>>传送门

转载于:https://www.cnblogs.com/chevin/p/5744188.html

<think>我收到了用户关于在Linux环境下使用CMake和NDK编译AndroidC++静态库的查询。用户提供了几个站内引用作为背景信息,虽然这些引用有些混乱,但我需要从中提取有用部分。从引用内容看,核心步骤涉及:安装NDK和CMake(引用2)、设置环境变量(引用2)、使用CMAKE_TOOLCHAIN_FILE配置交叉编译(引用3)、最后用strip工具减小库体积(引用4)。特别注意引用3强调了NDKr19版本后更简化的工具链配置方式。用户明确需求是"linuxcmakendkbuildandroidcppstaticlibrarytutorial",我需要构建完整的实现路径。准备分环境准备、配置、编译、优化四个阶段,突出关键点:-NDK版本建议选稳定版如r25b(根据引用3经验)-静态库需修改CMake的add_library为STATIC(引用1隐含需求)-必须设置CMAKE_TOOLCHAIN_FILE指向NDK内的android.toolchain.cmake(引用3核心内容)-strip操作可参考引用4的路径格式将在回答中注意:所有命令行用代码块标注,CMake变量用行内公式$...$格式,关键步骤添加引用标记[^1][^3]。最后计划生成关于ABI选择、动态库转换、NDK版本差异的问题延伸。</think> 以下是在 Linux 环境下使用 CMake 和 NDK 编译 Android C++ 静态库的完整步骤,整合了站内引用和最佳实践: ### 📌 环境准备 1. **安装依赖**(参考 [^2][^3]) ```bash # 下载 NDK (推荐 r25+,兼容 r18b 及以上) wget https://dl.google.com/android/repository/android-ndk-r25b-linux.zip unzip android-ndk-r25b-linux.zip -d ~/android-ndk # 安装 CMake (至少 3.10.2) sudo apt-get install cmake ``` 2. **配置环境变量** ```bash export ANDROID_NDK=~/android-ndk/android-ndk-r25b export PATH=$PATH:$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin ``` --- ### 🛠️ 配置 CMake 1. **创建 `CMakeLists.txt`**(关键配置 [^1][^3]) ```cmake cmake_minimum_required(VERSION 3.10.2) project(MyStaticLib) # 设置交叉编译工具链 (NDK r19+ 新方法) set(CMAKE_TOOLCHAIN_FILE ${ANDROID_NDK}/build/cmake/android.toolchain.cmake) # 指定目标 ABI set(ANDROID_ABI arm64-v8a) # 可选 armeabi-v7a/x86/x86_64 # 生成静态库 add_library(MyLib STATIC src/core.cpp src/utils.cpp ) # 包含头文件 target_include_directories(MyLib PUBLIC include) ``` 2. **工具链文件说明**(重要 [^3]) ```cmake # CMAKE_TOOLCHAIN_FILE 自动处理: # - 编译器路径 $NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++ # - STL 库链接 # - ABI 特性配置 ``` --- ### 🔧 编译流程 ```bash # 1. 创建构建目录 mkdir build && cd build # 2. 生成 Makefile (指定 Android 平台) cmake .. -DANDROID_PLATFORM=android-21 \ -DANDROID_NDK=$ANDROID_NDK \ -DCMAKE_BUILD_TYPE=Release # 3. 编译静态库 make -j$(nproc) # 4. 检查输出 ls libMyLib.a → 生成于 build 目录 ``` --- ### 🧪 验证与优化 1. **检查库架构** ```bash file libMyLib.a # 应显示 "current ar archive" ``` 2. **缩减体积**(参考 [^4]) ```bash # 使用 NDK 自带的 strip 工具 $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip --strip-unneeded libMyLib.a ``` --- ### 📚 完整参考示例结构 ``` project_root/ ├── CMakeLists.txt ├── include/ │ └── utils.h ├── src/ │ ├── core.cpp │ └── utils.cpp └── build/ # 编译输出目录 ``` --- 📌 **注意事项** 1. **NDK 版本差异**: - ≥ r19:必须使用 `CMAKE_TOOLCHAIN_FILE` [^3] - ≤ r18:需手动配置工具链路径 2. **ABI 兼容**:通过 `ANDROID_ABI` 指定目标架构 3. **Android 平台版本**:`android-21` 支持 >96% 设备 🔧 **解决问题**:若遇 `undefined reference` 错误,检查: - 静态库是否正确链接依赖项 - CMake 是否包含所有源文件 - 跨 ABI 编译时清除 build 目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值