centos7 glib2.0 arm版本的编译

文章描述了在编译Bluez代码时遇到的问题,主要集中在交叉编译libglib-2.0及其依赖库libffi和zlib上。作者详细列举了配置命令、遇到的错误以及解决方法,包括缺少库、头文件和库文件格式不匹配等。最终,经过一系列的源码下载、编译和安装,作者成功解决了所有问题。

        最近在看bluez代码,想编译个例子来玩一下,然后bluez里的例子会用到 libglib-2.0 库里的接口,于是开始了漫长的编译 arm 版本的 libglib-2.0,Linux 系统有时就是很麻烦,要编译一个库,结果发现依赖一大堆库,你需要先把依赖的库成功装好才能正常进行下去。

        首先想要成功编译 glib2.0 库,则需要提前安装两个依赖库,这一步是必须的,即使现在不装等到编译 glib2.0 的时候会失败的。

1,yum install libffi-dev (这里需要注意,如果是需要编译arm版本,还得下载源码安装)

2,yum install -y glibc-devel

特别是第2个,网上搜了大部分都是ubuntu的,人家是用 apt-get libglib2.0-dev,这个软件包名 libglib2.0-dev 在 Centos 上是不对的,真是坑啊。

我的 configure 命令行是这样的:

./configure --prefix=/usr/local/glib --host=arm-himix200-linux --cache-file=arm-himix200-linux.cache CC="arm-himix200-linux-gcc" LIBFFI_CFLAGS=/usr/include/

1, extra flags to get ANSI library prototypes... configure: error: cannot test program while cross compling

这个错误也不知道是什么原因导致的,网上搜了很多,其中看到有人说可能是下载的glib-2.0源码版本过低,当时我也不记得下载的哪个版本了,于是我先了一个比较高的版本:glib-2.30.2.tar.xz

创建一个空目录进行下载:wget http://ftp.acc.umu.se/pub/GNOME/sources/glib/2.30/glib-2.30.2.tar.xz ;确实用这个版本时,没有出现上面这个错误,但出现了其他错误。

2, Could not find a glib-genmarshal in your PATH

<think> 嗯,用户需要的是在银河麒麟ARM系统上安装glib 2.66.0的方法。用户明确提到了ARM架构和特定版本,这很关键。 首先确认用户的环境:从引用[1]看,银河麒麟V10 SP3(Halberd)有aarch64版本,用户应该就是用的这个。引用[2]提到了ARM64版本麒麟V10编译Qt的流程,虽然主题不同,但编译依赖的安装部分有参考价值。 用户要安装的glib 2.66.0比较旧了。当前主流Linux发行版仓库里的glib都远高于此版本。考虑到银河麒麟基于CentOS,其仓库版本可能也不匹配,所以需要源码编译的可能性很大。 编译glib的主要挑战在于依赖管理。核心依赖包括: - PCRE(正则库) - libffi(函数接口) - Python(用于构建) - Meson构建系统 用户可能需要先解决这些依赖才能继续。 考虑到ARM架构的特殊性,所有编译步骤都需要确保生成aarch64的目标代码。在麒麟系统上编译时,默认应该就是ARM环境,但最好还是确认一下。 安装路径方面,如果用户没有root权限,可以建议用户使用--prefix指定到用户目录;若有权限则默认装到/usr/local更通用。 用户可能遇到的问题包括: 1. 依赖包版本冲突 2. 麒麟系统特有的安全策略限制 3. ARM架构下的编译错误 这些都需要在步骤中给出应对预案。 最后测试环节很重要,特别是glib作为基础库,一旦出问题会影响整个系统。建议用户用pkg-config验证并写个简单程序测试。 </think> 在银河麒麟V10ARM64架构)上安装特定版本glib 2.66.0需要通过源码编译安装,以下是详细步骤: ### 安装前准备 1. **确认系统版本**(引用[1]内容): ```bash cat /etc/.productinfo ``` 确保输出包含类似 `Kylin Linux Advanced Server release V10 (SPx)/(Tercel/Sword/Lance/Halberd)-aarch64-Buildxx` 的信息,确认是ARM架构系统 [^1]。 2. **安装编译依赖**(参考引用[2]的依赖思路): ```bash sudo apt-get update sudo apt-get install -y \ build-essential \ meson ninja-build \ pkg-config \ libffi-dev \ libpcre3-dev \ gettext \ python3-pip \ dh-autoreconf \ zlib1g-dev ``` > 注:麒麟系统APT源需包含这些包,若部分包名不同,尝试 `sudo apt search <包关键词>` 查找替代名称 [^2]。 --- ### 编译安装glib 2.66.0 ```bash # 1. 下载源码 wget https://download.gnome.org/sources/glib/2.66/glib-2.66.0.tar.xz tar xvf glib-2.66.0.tar.xz cd glib-2.66.0 # 2. 配置编译选项(ARM64需指定交叉编译参数) meson setup builddir \ --prefix=/usr/local \ -Dlibmount=disabled \ -Dselinux=disabled \ --buildtype=release \ -Dc_args="-march=armv8-a" \ -Dcpp_args="-march=armv8-a" # 3. 编译安装 cd builddir ninja sudo ninja install # 4. 更新动态链接库 sudo ldconfig ``` --- ### 验证安装 ```bash # 检查版本 pkg-config --modversion glib-2.0 # 应输出: 2.66.0 # 测试头文件 echo '#include <glib-2.0/glib.h>' | gcc -E - >/dev/null # 无报错即成功 ``` --- ### 关键问题解决方案 1. **依赖缺失错误**: - 若报错 `No package 'libffi' found`: ```bash sudo apt-get install libffi-dev ``` - 若报错 `No package 'pcre' found`: ```bash sudo apt-get install libpcre3-dev ``` 2. **ARM架构优化**: - 编译参数 `-march=armv8-a` 显式指定ARMv8指令集 - 若遇浮点运算错误,追加 `-mfloat-abi=hard` 3. **旧版本冲突**: 麒麟系统预装glib版本可能较高,通过源码安装到`/usr/local`可避免覆盖系统文件。 --- ### 卸载方法 ```bash cd glib-2.66.0/builddir sudo ninja uninstall sudo ldconfig ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值