http://blog.csdn.net/ty3219/article/details/46942493
glib是一个C语言函数库,它对很多系统调用进行了封装,提供了很多实用的功能,能极大地方便编程。
为了在产品上尝试使用glib,需要对glib进行交叉编译,使其能在ARM9上运行。
以下是版本信息:
开发平台:Linux ubuntu 3.8.0-35-generic #52~precise1-Ubuntu SMP
PC gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
ARM gcc version 4.1.2
zlib-1.2.8
libffi-3.2.1
glib-2.45.3
为了方便说明,先假设
1、zlib-1.2.8.tar.gz、libffi-3.2.1.tar.gz和glib-2.45.3.zip都已经解压到/home/user/build/目录下,分别是/home/user/build/zlib-1.2.8、/home/user/build/libffi-3.2.1和/home/user/build/glib-2.45.3。
2、CC是交叉编译器,根据自己的实际编译器而不同,这里CC最好时包含完整的路径。我这里是/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc
开始编译
1. 编译zlib,编译脚本如下:
执行成功之后,zlib就会安装在/home/user/build/zlib-1.2.8/install/arm/目录
2. 编译libffi,编译脚本如下:
执行成功之后,zlib就会安装在/home/user/build/libffi-3.2.1/install/arm/目录
3. 下面编译glib,是个硬骨头,会有一些错误。
1)首先,glib需要一些配置,下面是一个配置文件glib.cache,这个配置文件需要放在/home/user/glib-2.45.3目录下面。
这个配置文件的选项,以及选项的意义看这里
https://developer.gnome.org/glib/stable/glib-cross-compiling.html
2)运行autogen.sh
3)编译PC版glib
没错,你没看错,想交叉编译glib,需要先编译一个PC版本,而编译PC版glib又需要依赖PC版zlib和libffi
由于我使用的是ubuntu,所以直接sudo apt-get install libffi-dev就可以了,zlib系统已经带了
所以我编译PC版glib非常简单
编译完成以后,就会在/home/usr/build/glib-2.45.3/install/pc/bin/目录下得到glib-genmarshal,否则在执行configure的时候会提示
configure: error: Could not find a glib-genmarshal in your PATH。至于为什么PC版就可以这个我还没有搞懂。
4)开始编译glib
这时,make的时候就应该会出错,提示
CCLD gobject-query./.libs/libgobject-2.0.so: undefined reference to `ffi_type_pointer'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_float'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_void'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_sint64'
./.libs/libgobject-2.0.so: undefined reference to `ffi_prep_cif'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_uint32'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_double'
./.libs/libgobject-2.0.so: undefined reference to `ffi_call'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_sint32'
./.libs/libgobject-2.0.so: undefined reference to `ffi_type_uint64'
collect2: ld returned 1 exit status
这是由于没找到libffi.so的缘故。虽然我在配置里已经指定了libffi.so的路径,但glib就是死活找不到,暂时没找到解决方法,只能绕一下,把libffi.so libffi.so.6 libffi.so.6.0.4
复制到arm gcc的目录下,我这里的目录是/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/arm-none-linux-gnueabi/sysroot/lib。如果你不知道
你该复制到哪里,你可以在你的交叉编译器目录下找以下libc.so.*,比如find /opt/freescale -name libc.so.*,看libc.so.*放哪你就放哪。
同理,libz.so libz.so.1和libz.1.2.8也要拷贝到这个目录下。
后面继续make,又会弹出来一个错误
gfile.c:2749: error: too many arguments to function 'splice'
这个错误是跟系统以及编译器的版本有关系的。splice是一个系统调用,它的声明在交叉编译器的fcntl.h文件里的,但我这个编译器的splice只有4个参数,glib却传了6个参数。
这肯定不匹配嘛,没办法,只能修改glib-2.45.3目录下的config.h,把#define HAVE_SPLICE注释掉,这样就能编译过去了。至于影响,暂时还不清楚,这个splice是linux的
一个数据拷贝优化技术,可以减少数据的拷贝次数,提高系统效率,即使没有应该也是可以正常工作的。
再继续make,又蹦出来一个错误,我内心也是崩溃的
./.libs/libgio-2.0.so: undefined reference to `g_module_close'
./.libs/libgio-2.0.so: undefined reference to `g_module_symbol'
./.libs/libgio-2.0.so: undefined reference to `g_module_supported'
./.libs/libgio-2.0.so: undefined reference to `g_module_open'
./.libs/libgio-2.0.so: undefined reference to `g_module_error'
collect2: error: ld returned 1 exit status
这个错误又是没找到动态库,这次是没找到gmodule.so,需要修改gio/Makefile
找到glib_compile_resources_LDADD, gsettings_LDADD, gdbus_LDADD, gapplication_LDADD, gresource_LDADD这几个变量,在给每个变量都加上一句
$(top_builddir)/gmodule/libgmodule-2.0.la \
加上之后类似这样
gdbus_LDADD = libgio-2.0.la \
$(top_builddir)/gobject/libgobject-2.0.la \
$(top_builddir)/gmodule/libgmodule-2.0.la \
$(top_builddir)/glib/libglib-2.0.la \
$(NULL)
再继续make。。。。。。。终于。。。。。。。
4. make install
文章浏览阅读534次。【导语】检讨书是一种常用的日常应用文,是犯了错误的个人或领导向当事人或组织写出的检讨错误、并保证绝不再犯的书信。检讨书的格式分为标题、称谓、正文和落款,内容包括出错问题、产生原因、改正措施或今后的打算。下面是无忧考网整理分享的考试没考好的检讨书1000字范文,欢迎阅读与借鉴。【篇一】尊敬的老师:在以前的学习中,我没有认真努力,这次没考好,现在想起来非常懊悔。今天,我怀着愧疚和懊悔给您写下这份检讨书..._计算机考试反思1000字
文章浏览阅读3.2k次。解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题_there is no session with id
文章浏览阅读7.6k次,点赞7次,收藏9次。tokenizer = AutoTokenizer.from_pretrained(DOWNLOADED_MODEL_PATH)tokens = tokenizer.encode_plus(txt, max_length=MAX_LEN, padding=‘max_length’,truncation=True, return_offsets_mapping=True)encode_plus返回所有的编码信息,具体如下:’input_ids:是单词在词典中的编码‘token_type_ids’:区_tokenizer encode_plus 两句
文章浏览阅读76次。2019独角兽企业重金招聘Python工程师标准>>> ..._linux 安装php 7.0
文章浏览阅读244次。本实例采用栈来实现,注意:栈是一种后进先出设计原则; 栈顶指针必须初始化;#include<stdio.h>#include<stdlib.h>#include<string.h>int main() { char a[101], s[101]; int i, len, mid, next, top; printf("Input strings:\n"); gets_s(a);//读取一行字符串 len = (int)strlen(a); mi_c语言栈判断回文字符串
文章浏览阅读7k次,点赞4次,收藏10次。此pl2303驱动程序不支持win11、非旺玖原装PL2303驱动解决办法_旺玖pl2303串口驱动
文章浏览阅读2.9k次。Python爬取数据Scrapy安装Scrapy简介及win下安装 Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据 ——百度百科scapy安装+wins 以下所有软件在win下面安装方式相似,且都要对应python版本及win的操作系统位数。有的软件依赖其他软件,所以要先安装依赖。第一步:安装p_爬取soopat
文章浏览阅读2w次,点赞6次,收藏5次。1 1.文件上传下载1.1 文件上传1.1.1 文件上传的作用例如网络硬盘!就是用来上传下载文件的。在智联招聘上填写一个完整的简历还需要上传照片呢。1.1.2 文件上传对页面的要求1.必须使用表单,而不能是超链接;2.表单的method必须是POST,而不能是GET;3.表单的enctype必须是multipart/form-data;4.在表单中添加file表_"md.setdprize(rs.getstring(\"dprize\").equals(\"0\")?\"启用\":\"禁用\"?\"星级宿舍\");"
文章浏览阅读3.6k次,点赞2次,收藏2次。今天使用spring-cloud+nacos无法连接。报各种错误,错误如下:Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class _org/springframework/cloud/autoconfigure/configurationpropertiesrebinderautoc
文章浏览阅读1k次。这都2021年了,还不学会做总结?《Web前端》学习总结第1章 HTML语言基础第2章 表格与框架第3章 表单第4章 CSS语言基础第5章 CSS页面布局第6章 JavaScript语言基础第7章 JavaScript对象第8章 BOM与DOM编程第9章 HTML 5基础第10章 HTML 5进阶第11章 jQuery基础第1章 HTML语言基础 HTML是一种描述性标记语言,用来描述页面内容的显示方式; HTML是一种纯文本文件,以“.html”或“.htm”为后缀; _web前端课程总结
文章浏览阅读2.9k次。毛毛虫的原作: VOID GetProcessNameByPid(IN ULONG ulPid, OUT PUNICODE_STRING ustrProcessName){ NTSTATUS status = STATUS_SUCCESS; ULONG ulNeed = 0; PSYSTEM_PROCESSES pSystemProcess = NULL; PVOID_ioctrl 内核获取用户态的pid
文章浏览阅读95次。1.TEXTAREA自适应文字行数的多少 <textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"></textarea>2.脚本永不出错 <SCRIPT LANGUAGE="javascript"><!-- Hi..._js常用小技巧