基于cygwin构建u-boot(四)libgcc引用
接上文,config.mk文件修改后,即使没有.depend也可以正常处理了:
六、错误:gcclib引用错误
完成之前几篇的工作后,程序就可以一直执行了,直到最后生成u-boot,
出现如下错误告警如下:
d:/cygwin/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.\libgcc.a(_dvmd_lnx.o):
In function `__aeabi_ldiv0':(.text+0x8): undefined reference to `raise'
Makefile:: recipe for target `u-boot' failed
make: *** [u-boot] Error
从字面上立即理解,是__aeabi_ldiv0函数需要 raise函数,但没有找到定义。
1、初步分析:参考其他资料,发现和libgcc库有一定关系。
从路径上看,是工具链的libgcc.a调用__aeabi_ldiv0函数
其他途径了解,需要自己构建raise函数。要么是重新编译库,要么是在u-boot底层修改。
感觉这是u-boot通用性问题,u-boot应该有特殊应对的。
2、经过搜索,发现u-boot代码中有raise函数
\u-boot-2010.09\arch\arm\lib\eabi_compat.c文件中,有raise函数的定义。
int raise (int signum)
{
printf("raise: Signal # %d caught\n", signum);
return ;
}
但是编译过程没有进行该编译文件。
打开该文件夹下的makefile文件。
# For EABI conformant tool chains, provide eabi_compat()
ifneq (,$(findstring -mabi=aapcs-linux,$(PLATFORM_CPPFLAGS)))
TARGETS += $(obj)eabi_compat.o
endif
需要将ARM -mabi设定为 aapcs-linux才会编译该文件。
3、-mabi=aapcs-linux后,还是无法正常处理。
由于makefile只是编译了文件,没有加入库,也没有外部引用。配置后仍然无法使用。
【注】由于暂时不想通过修改u-boot原始代码实现,所以再找找其他途径。
4、发现 arch\arm\lib\makefile还有其他功能。
# Always build libarm.a
TARGETS := $(LIB) # Build private libgcc only when asked for
ifdef USE_PRIVATE_LIBGCC
TARGETS += $(LIBGCC)
endif
看到了可以通过USE_PRIVATE_LIBGCC,构建私有的libgcc。
【注释】arm-linux的工具链一般都带libgcc库。
再回到主文件夹的Makefile,找到如下代码:
# Add GCC lib
ifdef USE_PRIVATE_LIBGCC
ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
PLATFORM_LIBGCC = -L $(OBJTREE)/arch/$(ARCH)/lib -lgcc
else
PLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc
endif
else
PLATFORM_LIBGCC = -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
endif
PLATFORM_LIBS += $(PLATFORM_LIBGCC)
export PLATFORM_LIBS
可以看到libgcc可以从三个途径配置:
1)USE_PRIVATE_LIBGCC = yes,从 /arch/arm/lib 中获得 libgcc.a
2)USE_PRIVATE_LIBGCC = path+file,从 指定的路径获得 libgcc.a
3)如果没有配置USE_PRIVATE_LIBGCC,就从工具链 libgcc路径获得。
该方式是通过gcc工具返回的,见下shell命令
$ ./arm-2009q1/bin/arm-none-linux-gnueabi-gcc -print-libgcc-file-name
d:/cygwin/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3./libgcc.a
5、完成u-boot输出,在make是,添加 USE_PRIVATE_LIBGCC = yes参数,编译后,就产生u-boot了。

===【完成构建】===
基于cygwin构建u-boot(四)libgcc引用的更多相关文章
- 基于cygwin构建u-boot(一)环境搭建
从本文开始,更系统的描述基于cygwin构建u-boot. 之前<痛苦的版本对齐>系列,对于cygwin环境下Sourcery CodeBench,u-boot-1.1.6的构建有侧面的说 ...
- 基于cygwin构建u-boot(五)结尾:shell 工具
结尾,基于cygwin对u-boot的处理,很大一部分都是再处理 路径等相关的问题,只有一个涉及到gcc的参数配置. 为了达到顺利编译的目的,使用shell下的部分工具进行处理. 1.sed sed简 ...
- 基于cygwin构建u-boot(二)gcc的C语言标准版本号(-std=)
接上文,修改Makefile和config.mk中,.depend相关文件格式后继续编译. 四.tools文件夹的文件编译错误 错误告警如下[多行信息,请使用右侧滚动条查看]: gcc -Wall - ...
- 基于cygwin构建u-boot(三)make错误忽视
接上文,修改gcc 的-std标准后,.depend文件处理仍然出现了错误: 五.错误:make中命令报错(sed找不到需要的文件) 错误告警如下: make -C examples/api all ...
- eclipse环境下基于已构建struts2项目整合spring+hibernate
本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...
- 基于springboot构建dubbo的入门demo
之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ...
- 基于kubernetes构建Docker集群管理详解-转
http://blog.liuts.com/post/247/ 一.前言 Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度 ...
- Java四种引用包括强引用,软引用,弱引用,虚引用。
Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.e ...
- JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例
简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用) ...
随机推荐
- C++ 继承和包含的区别?
在<代码大全>这本书的第六章中提到了有关包含与继承的一些原则,我摘取如下: 一.包含("has a") 包含表示一个类含有一个基本数据元素或对象.包含是面向对象编程的主 ...
- 使用NSTimer实现倒计时-备
今天在CocoaChina上面看到有人在问倒计时怎么做,记得以前在看Iphone31天的时候做过一个,今天翻出来运行不了了,原因是我的IphoneSDK升级到3.1了,以前使用的是2.2.1,在2.2 ...
- WPF:如何实现单实例的应用程序(Single Instance)
原文:WPF:如何实现单实例的应用程序(Single Instance) 好吧,这是我将WPF与Windows Forms进行比较的系列文章的第四篇,讨论一下如何实现单实例(single instan ...
- penetration testers渗透测试,hack,vnc,nat,
penetration testers渗透测试,hack,vnc,nat,
- spring笔记(一)
这几日,在看spring框架的知识,了解了一下spring的IoC核心,AOP的概念,然后剩下的其实就是Spring对于其他的java服务的封装:ORM,web, JMS,JMX等. 坦白地说,我并没 ...
- EBS服务器管理
EBS 服务的重启 停止Oracle Applications 服务的顺序为:停止应用产品相关服务,再停止数据库相关服务: 启动Oracle Applications 服务的顺序为:启动数据库相关服务 ...
- 一、mysql分表简单介绍
一.Mysql分表的原因 1.当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了. 分表的目的就在于此,减小数据库的负担,缩短查询时间. 2.mysql中 ...
- warning: the `gets' function is dangerous and should not be used.(转)
今天在LINUX下编译C程序时,出现了:warning: the `gets' function is dangerous and should not be used. 这个warning. 百度之 ...
- jquery ajax提交json格式的数据,后台接收并显示各个属性
我的表单如下: <form onsubmit="return false"> <ul> <li><span>用户名</span ...
- mysql 中文乱码的解决方法
添加或修改my.ini 配置文件,设置编码字符为utf8 ,默认为latin1,见红色字体 [mysql]# 设置mysql客户端默认字符集default-character-set=utf8 [my ...