centos7 glib2.0 arm版本的编译

news2024/11/25 4:20:58

        最近在看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

这个错误就是上面提到的第 2 个依赖库

3,  No package 'libffi' found

这个错误就是上面提到的第 1 个依赖库,注意这里提到的版本,如果命令行安装的版本不符合,那就直接下载一个合适的版本手动编译安装吧

4, qsort_r uses glibc compatible argument order

有几个类似的错误,都是是否支持一些特性的吧,这里不管了,直接想办法让它正常生成Makefile再说。这里是这样处理:

ac_cv_func_qsort_r=no
glib_cv_stack_grows=no
glic_cv_uscore=no
glib_cv_uscore=no
ac_cv_func_posix_getpwuid_r=no
ac_cv_func_posix_getgrgid_r=no

把这些 echo 到 arm-himix200-linux.cache 里,如:

最后configure 执行成功,才能生成Makefile

我的目标目录下:

5,gclosure.c:29:17: fatal error: ffi.h: No such file or directory

这里有一个问题很奇怪,我在编译的时候用的是:make;make install;然后在编译的过程中还是出现了一个错误:

虽然出现了这个错误,但目标目录下已经生成了glib-2.0的库,不知道为何。而这个错误更奇怪,因为这个头文件是有的,不管是我安装的libffi目录下,还是系统目录下。在最开始的 ./configure 时,我已经加了 LIBFFI_CFLAGS=/usr/include/ 来指定 libffi 的头文件位置,而且我也用过 LIBFFI_CFLAGS=/usr/local/lib/libffi-3.0.13/include/,这两个加了都没用,还是会出现找不到 ffi.h 头文件的错误,而实际这个头文件是有的:

可以看到是目录 gobject 编译gclosure时出错的,相应的我在那里添加了一下打印:

最后无奈我直接把其他地方的 ffi.h 和 ffitarget.h 直接拷贝到 gobject 目录下,再编译就不再有这个错误了。 

6,libffi.so: file not recognized: File format not recognized

这个也是开始提到的依赖库 libffi,但我们上面安装的 x86版本的,arm 版本还得自己下载源码进行编译安装了,我下载的是 libffi-3.0.13.tar.gz,因为提示这个目录下的 libffi.so文件格式不对,它是x86版本的。

我所使用的 configure 是这样的:

./configure --prefix=/usr/GNUstep/System/Library/Libraries/ --host=arm-himix200-linux 

然而实际编译出来的目标目录下还有一个 lib 目录,用 file 命令看,这里已经是 ARM 版本了

继续编译 glib-2.0 还是那个错误,干脆我直接把目标目录下的 lib 的文件拷贝到它的上一层目录下,因为这个库文件目录不知道在Makefile 哪里指定的,省点麻烦:

7, zlib.h: No such file or directory

虽然 libffi.so 的错误已经解决了,但又出现了下面这个错误,应该跟上面一样的依赖库, 

一个坑接着一个坑,真是要崩溃了。最简单的办法就是把 /usr/zlib.h 和 /usr/zconf.h 拷贝到 gio 目录下。

 

 8,arm-linux-gnueabi/bin/ld: cannot find -lz

 拷贝头文件还是不行啊,最后还是没有libz库,没有办法,还是下载源码编译安装,我用的是这个:CC=arm-himix200-linux-gcc ./configure --prefix=/usr/local/zlib/,它没有--host 选项无法指定交叉编译器。

 编译出来的成果

zlib 库虽然编译出来了,但继续编译glib的时候还会出现找不到 libz 的错误,如上面是编译gio的时候找不到 libz 库。我的解决办法就是把库拷贝到 gio 目录下,然后在它的 Makefile 里添加-L,如:

接着编译,然后又出现同样的错误

 

这个简单直接,把zlib拷贝到gio/tests/目录下,然后再修改Makefile,添加 -L./ 指定库文件目录:

 

最后真是大功告成啊,真是不容易啊,比以往所有手动编译源码的事情都复杂得多了,也是遇到前所未有的困难啊,好在最后还是成功了。

 

 最后是编译 bluez,最开始那么多的 undefined reference to xxx,到最后剩下 2 个,有一个是私有库里,但还是有一个应该也是要编译其他库:

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux命令学习之帮助命令man

cat /proc/version和uname -a可以查看CentOS内核使用版本。 我使用的Linux操作系统发行版本号是7.6.1810,可以通过cat /etc/redhat-release进行查看。 man man是manual的缩写,是操作说明的意思。 使用man touch想要看一下touch的使用帮助,…

OpenMMLab开营笔记

摘要 很高兴能加入OpenMMLab AI实战营,成为第二期4班的一名学员。OpenMMLab经过几年的发展和沉淀,其开源项目已经覆盖到计算机视觉的各个领域。OpenMMLab 为香港中文大学-商汤科技联合实验室 MMLab 开源的算法平台,不到两年时间,…

文件操作之文件包含全解(41)

<!#include file”1.asp”--> 作者&#xff1a;沙漠里的鲸 https://www.bilibili.com/read/cv14178731/ 出处&#xff1a;bilibili 文件包含的作用就是将这个文件包含进去之后&#xff0c;会调用指定文件的代码。先将文件包含才能执行里面的一些相关代码&#xff0c;比如…

SAP-MM-标准报表路径

一、SAP MM模块系统自带的标准报表很多&#xff0c;常见报表都放在每个主题的“清单显示”和“报表”文件夹下&#xff0c;如下图所示&#xff1a; 二、另外&#xff0c;还有一些报表&#xff0c;放在另外一个地方&#xff0c;需要时&#xff0c;可以随时进行查看&#xff0c;前…

陷入困境?Taos创建超表带来的错误!

taos创建超表时报错 运行如下命令 let res await cursor.query("CREATE STABLE meters1 (ts TIMESTAMP, value FLOAT, slot INT,rack INT,nameId VARCHAR(32),adName VARCHAR(32),dbNumber INT,dataType VARCHAR(28), unit VARCHAR(28)) TAGS (location binary(64), gr…

2GT齿轮的齿形参数

文章目录 2GT齿轮的齿形参数概述笔记齿的种类方形齿半圆弧齿全圆弧齿精确圆弧齿修正圆弧齿梯形齿齿形参数用SW画一个2GT齿END 2GT齿轮的齿形参数 概述 零件上用到了2GT的同步轮和惰轮, 想在装配图上将2个齿轮皮带都画上, 看看有没有干涉. 整体修改是否合理. 在淘宝店家的主页…

Linux系统下imx6ull QT编程——开发环境及 U盘拷贝文件(十)

Linux QT编程 文章目录 Linux QT编程前言一、开发环境二、文件拷贝 前言 前面学习了一些基础&#xff0c;然后qt我也有学过&#xff0c;直接动手在开发板上进行编程吧&#xff0c;但是开发板需要安装环境&#xff0c;需要拷贝一些文件&#xff0c;我使用得是U盘。 一、开发环…

【C++进阶5-红黑树】噩梦般的存在?手提AVLTree暴揍红黑树!

今天&#xff0c;带来无数人的噩梦——红黑树的讲解。文中不足错漏之处望请斧正&#xff01; 如果还没看过AVLTree讲解的一定要去看看&#xff0c;看完才能更好理解红黑树&#xff01; 是什么 红黑树是自平衡的二叉搜索树。 红黑树的规则: 每个结点非黑即红 根结点为黑叶子…

程序设计综合实习(C语言):考勤管理系统

一、目的 1&#xff0e;调动创新能力的培养 二、实习环境 Visual Studio 2022 三、实习内容与步骤 问题描述&#xff1a; 每个员工信息包括工号、姓名、年龄、性别、部门等&#xff1b; 功能要求&#xff1a; &#xff08;1&#xff09;能够增加、删除、修改员工信息。 &…

[CTFTraining] ASIS CTF 2019 Quals Unicorn shop

​ 我们随便买一件商品&#xff0c;1~3都显示&#xff1a; ​ 只有第4个显示&#xff1a; ​ 只允许输入一个字符&#xff0c;题目叫Unicorn&#xff0c;猜测为Unicode。在Unicode - Compart搜索比千大的Unicode码&#xff1a; ​ 最后填进去买下商品得到flag。 另外&#…

CDGA 认证:第四章 数据架构(重点章节)习题集解析

1. 企业架构不包括哪项&#xff1f;&#xff08; &#xff09; A 业务架构 B 数据架构 C 系统架构 D 技术架构 【答案解析】DAMA-DMBOK2 P72 2. 关于架构设计生命周期描述错误的是&#xff1f;( ) A 可以是针对当前的 B 可以是面向未来的 C 可以是已实施完成的 D 可以是已经…

Flutter 对话框【代码实践】

Flutter 对话框【代码实践】 文章目录 Flutter 对话框【代码实践】一、普通对话框1、示例一&#xff1a;圆角、背景截图代码 一、普通对话框 1、示例一&#xff1a;圆角、背景 截图 代码 Center(child: ElevatedButton(onPressed: () {showDialog(context: context,builder:…

Spring Boot如何实现分布式系统中的服务发现和注册?

Spring Boot如何实现分布式系统中的服务发现和注册&#xff1f; 随着互联网的快速发展&#xff0c;越来越多的企业开始将自己的业务迁移到分布式系统中。在这种情况下&#xff0c;服务发现和注册变得尤为重要。对于分布式系统中的每个服务来说&#xff0c;它需要知道其他服务的…

数据可视化——使用echars图表展示

目录 1、前言 2、解决方案 2.1、echars&#xff08;前端等组件库&#xff09; 2.2、PPT等其他软件工具 2.3、使用flourish等在线数据可视化制作平台 2.4、自己用代码实现 1、前言 有一个小作业&#xff0c;需要自己收集一组数据&#xff0c;然后进行数据可视化&#xff0…

QListWidget和QListView的使用和item点击事件

QListWidget和QListView很常用&#xff0c;但是使用上功能类似&#xff0c;往往容易分不清区别&#xff0c;但是不知道如何选择。这里总结下二者之间的区别和使用&#xff0c;分享给有需要的人&#xff0c;有需要的可点击收藏。 QListView介绍 QListView是Qt中用于显示列表的一…

程序在内存中的分布

1. 具体分布细节由编译器决定 2. 分布图 3. 静态局部变量通常被存放在程序的.data段中。 一般地&#xff0c;静态局部变量定义在函数体内&#xff0c;在函数执行时&#xff0c;它会在静态存储区分配内存&#xff0c;并且只被初始化一次。因为静态局部变量是在编译阶段产生的&…

SpringCloud GateWay 学习

SpringCloud GateWay 文章目录 SpringCloud GateWay1 Gateway 介绍2 代码实现 1 Gateway 介绍 有一个前后端分离项目&#xff0c;分析如图 使用网关服务Gateway&#xff0c;重构项目架构 Gateway 是在 Spring 生态系统之上构建的 API 网关服务&#xff0c;基于 Spring &#x…

DES,RAS,HASH

是猫咪&#xff0c;我加入了一些猫咪 1.DES Data Encryption Standard&#xff0c;即数据加密标准&#xff0c;是一种使用密钥加密的块算法。设计中使用了分组密码设计的两个原则&#xff1a;混淆&#xff08;confusion&#xff09;和扩散(diffusion)。DES加密算法原理简析_51…

秋招笔试零基础怎么办?自顶向下真题学习法,这样准备就稳啦!

秋招笔试零基础怎么办&#xff1f;自顶向下真题学习法&#xff0c;这样准备就稳啦 秋招临近&#xff0c;是时候提前准备笔试了。想必各位都忙着刷穿leetcode的剑指Offer&#xff0c;或者牛客的往年真题等等 但你真的了解自己的算法知识板块哪里有纰漏吗&#xff1f; 你知道今…

【C++】初识STL

目录 &#x1f31e;专栏导读 &#x1f31b;什么是STL &#x1f31b;STL的版本 &#x1f31b;STL的六大组件 &#x1f31b;STL的重要性 &#x1f31b;STL的缺陷 &#x1f31e;专栏导读 &#x1f31f;作者简介&#xff1a;日出等日落&#xff0c;在读本科生一枚&#xff0…