Jansson 在aix上的编译

本文介绍在AIX操作系统中,由于系统未自带GCC,因此在编译过程中需要手动调整GCC的编译选项。具体操作是在configure后找到src/Makefile文件中的AM_CFLAGS=-Wall-Wextra-Werror并进行删除。
aix没有自带gcc, 编译的时候会自动生成gcc的CFLAGS= -Wall -Wextra -Werror

可以在configure 后 src/Makefile 中找到AM_CFLAGS = -Wall -Wextra -Werror 删除,即可
要 **编译一个适用于 ARM 架构的 Jansson 静态/动态库**,你需要使用 **交叉编译工具链(cross-compiler)**,在 x86_64 主机上生成能在 ARM 设备(如树莓派、嵌入式 Linux 板)上运行的二进制文件。 下面是一个完整的流程,教你如何为 ARM 架构(例如 ARMv7-A 或 AArch64)交叉编译 [Jansson](https://www.digip.org/jansson/) 库。 --- ## ✅ 一、目标架构说明 我们先明确你要编译的目标: | 目标平台 | 示例设备 | 工具链前缀 | |--------|---------|------------| | ARM32 (ARMv7) | 树莓派 Zero/1/2, 嵌入式 Cortex-A7/A9 | `arm-linux-gnueabihf-` | | AArch64 (ARM64) | 树莓派 3/4, NVIDIA Jetson Nano, 服务器 ARM | `aarch64-linux-gnu-` | 本文以 **ARM32(arm-linux-gnueabihf)** 为例,但同样适用于 ARM64。 --- ## 🛠️ 二、准备工作 ### 1. 安装交叉编译工具链 #### Ubuntu/Debian: ```bash # 对于 ARM32 sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf # 对于 ARM64 sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu ``` 安装后你会有: - `arm-linux-gnueabihf-gcc` - `aarch64-linux-gnu-gcc` --- ### 2. 克隆 Jansson 源码 ```bash git clone https://github.com/akheron/jansson.git cd jansson mkdir build-arm && cd build-arm ``` --- ## 🔧 三、使用 CMake 进行交叉编译 ### 1. 创建工具链文件(推荐) 创建一个工具链描述文件,让 CMake 知道如何交叉编译。 #### 文件:`toolchain-arm.cmake` ```cmake SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) # 指定交叉编译器路径(根据你的系统调整) SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) # 搜索库和头文件时,只在目标平台目录中查找 SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) ``` > ⚠️ 如果你是 ARM64,请将 `arm-linux-gnueabihf-` 替换为 `aarch64-linux-gnu-` --- ### 2. 使用 CMake 配置并编译 ```bash cmake .. \ -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm.cmake \ -DCMAKE_INSTALL_PREFIX=/opt/jansson-arm \ -DBUILD_SHARED_LIBS=ON \ # 可选:是否生成 .so 动态库 -DJANSSON_BUILD_DOCS=OFF \ # 不构建文档(节省时间) -DJANSSON_EXAMPLES=OFF # 不构建示例 ``` 📌 参数说明: - `-DCMAKE_TOOLCHAIN_FILE=...`: 使用上面定义的工具链 - `-DCMAKE_INSTALL_PREFIX=...`: 指定安装路径(建议单独目录) - `-DBUILD_SHARED_LIBS=ON/OFF`: 是否生成 `.so` 和 `.a` - `ON`: 同时生成 `.so` 和 `.a` - `OFF`: 只生成 `.a`(纯静态库) 然后编译: ```bash make -j$(nproc) ``` 生成的文件: - `src/libjansson.so` (如果启用) - `src/libjansson.a` 安装到指定目录(可选): ```bash make install ``` 这会把头文件和库复制到 `/opt/jansson-arm` 中,方便后续使用。 --- ## 📦 四、验证生成的库是否是 ARM 架构 使用 `file` 命令检查: ```bash file src/libjansson.a file src/libjansson.so ``` ✅ 正确输出应包含: ``` ELF 32-bit LSB shared object, ARM, EABI5 ``` 或对于 ARM64: ``` ELF 64-bit LSB shared object, ARM aarch64 ``` 表示确实是 ARM 架构。 --- ## 🚀 五、在 ARM 设备上使用 Jansson ### 方法 1:静态链接(推荐用于独立部署) 假设你有一个测试程序 `test_json.c`: ```c #include <stdio.h> #include <jansson.h> int main() { json_t *obj = json_object(); json_object_set_new(obj, "platform", json_string("ARM")); char *out = json_dumps(obj, 0); printf("%s\n", out); free(out); json_decref(obj); return 0; } ``` 编译命令(静态链接): ```bash arm-linux-gnueabihf-gcc test_json.c \ -I/opt/jansson-arm/include \ /opt/jansson-arm/lib/libjansson.a \ -o test_json_arm \ -lm ``` 生成的 `test_json_arm` 就可以在 ARM 设备上直接运行。 --- ### 方法 2:动态链接(需部署 `.so`) ```bash arm-linux-gnueabihf-gcc test_json.c \ -I/opt/jansson-arm/include \ -L/opt/jansson-arm/lib \ -ljansson \ -o test_json_arm ``` 然后你需要将 `libjansson.so` 复制到目标设备的 `/usr/lib` 或通过 `LD_LIBRARY_PATH` 指定路径。 --- ## 💡 六、常见问题与解决方案 | 问题 | 原因 | 解决方法 | |------|------|----------| | `CMake Error: The C compiler is not able to compile a simple test program` | 工具链未正确安装或路径错误 | 确保 `arm-linux-gnueabihf-gcc` 在 PATH 中可用 | | 找不到 `jansson.h` | 头文件路径不对 | 使用 `-I` 显式指定 include 路径 | | `undefined reference to json_*` | 忘了加 `-ljansson` 或没链接 `.a` | 检查链接顺序 | | 动态库无法加载 | 目标机缺少 `.so` 文件 | 把 `.so` 放到 `/usr/lib` 或设置 `LD_LIBRARY_PATH` | --- ## ✅ 总结:编译 ARM 版 Jansson 的关键步骤 | 步骤 | 命令/操作 | |------|-----------| | 1. 安装交叉编译器 | `sudo apt install gcc-arm-linux-gnueabihf` | | 2. 克隆源码 | `git clone https://github.com/akheron/jansson` | | 3. 创建构建目录 | `mkdir build-arm && cd build-arm` | | 4. 编写工具链文件 | `toolchain-arm.cmake` | | 5. 配置 CMake | `cmake .. -DCMAKE_TOOLCHAIN_FILE=...` | | 6. 编译 | `make` | | 7. 安装(可选) | `make install` | | 8. 使用 | 静态或动态链接到你的 ARM 程序 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值