接上文,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引用的更多相关文章

  1. 基于cygwin构建u-boot(一)环境搭建

    从本文开始,更系统的描述基于cygwin构建u-boot. 之前<痛苦的版本对齐>系列,对于cygwin环境下Sourcery CodeBench,u-boot-1.1.6的构建有侧面的说 ...

  2. 基于cygwin构建u-boot(五)结尾:shell 工具

    结尾,基于cygwin对u-boot的处理,很大一部分都是再处理 路径等相关的问题,只有一个涉及到gcc的参数配置. 为了达到顺利编译的目的,使用shell下的部分工具进行处理. 1.sed sed简 ...

  3. 基于cygwin构建u-boot(二)gcc的C语言标准版本号(-std=)

    接上文,修改Makefile和config.mk中,.depend相关文件格式后继续编译. 四.tools文件夹的文件编译错误 错误告警如下[多行信息,请使用右侧滚动条查看]: gcc -Wall - ...

  4. 基于cygwin构建u-boot(三)make错误忽视

    接上文,修改gcc 的-std标准后,.depend文件处理仍然出现了错误: 五.错误:make中命令报错(sed找不到需要的文件) 错误告警如下: make -C examples/api all ...

  5. eclipse环境下基于已构建struts2项目整合spring+hibernate

    本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...

  6. 基于springboot构建dubbo的入门demo

    之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ...

  7. 基于kubernetes构建Docker集群管理详解-转

    http://blog.liuts.com/post/247/ 一.前言        Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度 ...

  8. Java四种引用包括强引用,软引用,弱引用,虚引用。

    Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.e ...

  9. JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

    简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用) ...

随机推荐

  1. iOS学习之数据请求

    GET请求----同步连接 //GET请求 同步连接 - (void)handleSynchronize:(UIBarButtonItem *)item { //GET请求 //1.创建网址字符串; ...

  2. Swift学习之常用UI的使用

    Swift学习之常用UI的使用 最近笔者在开始学习苹果最新的编程语言,因为笔者认为,苹果既然出了这门语言就绝对不会放弃,除非苹果倒闭了(当然这里知识一个玩笑). 所以在不久的将来,swift绝对是iO ...

  3. App 冷启动:给 Android 的 Activity 添加一个背景

    2016/8/8 11:11:18 # 纠错 之前写的这篇内容的知识点有误,给大家造成了误导,深感抱歉. android 中给 Activity 设置背景的方法是在 style 文件中设置 windo ...

  4. Spring security oauth2最简单入门环境搭建

    关于OAuth2的一些简介,见我的上篇blog:http://wwwcomy.iteye.com/blog/2229889 PS:貌似内容太水直接被鹳狸猿干沉.. 友情提示 学习曲线:spring+s ...

  5. pcduino通过sd卡刷系统

    1.登录到pcduino的官网,下载相应的文件. 下载第一个kernel和后面那个ubuntu. 2.将SD卡插入到电脑上,运行下面这个软件: 那个盘符就是你的SD卡的盘符,选择卡量产,镜像文件选上面 ...

  6. OC .(点)与->(箭头)用法区别

    这两天同学总是问OC里.和->的用法区别,当时回答的不是很好,周末查了一下,大概清楚了,在这里记录一笔. 先看这个例程 #import <Foundation/Foundation.h&g ...

  7. 自定义Window进入和退出效果(转)

    看了android的源代码和资源文件,终于明白如何去修改设置Dialog和Activity的进入和退出效果了. 设置Dialog首先通过getWindow()方法获取它的窗口, 然后通过getAttr ...

  8. hdu 2106 decimal system

    #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> # ...

  9. 【Xamarin 开发 IOS --IOS 页面导航概念Segue】

    Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom 一.视图切换类型介绍在storyboard中,segue有几种不同的类型, ...

  10. WebApi接口开发

    文档 规范的文档对接口的开发有着至关重要的作用,规范的文档能够使 双方对接口的定义以及接口的参数都有一个明确的概念,便于沟通和联调. 在接口的开发过程中,为了保证传递参数的传递的私密性,参数传输是需要 ...