原文转载于:《ARM-LINUX-GCC -NOSTDLIB》http://blog.chinaunix.net/uid-26739173-id-3154722.html

在韦东山的mmu实验的 Makefile 中出现:

arm-linux-ld: firtst has both ordered [`.ARM.exidx' in init.o] and unordered [`.ARM.extab' in init.o] sections arm-linux-ld: final link failed: Bad value

此常见的错误的原因是: 编译时没有加上选项(-nostdlib)

-nostdlib作用: 不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。这个选项常用于编译内核、bootloader等程序,它们不需要启动文件、标准库文件。

C语言程序执行的第一条指令。并不是main函数。生成一个C程序的可执行文件时编译器通常会在我们的代码上加上几个被称为启动文件的代crt1.o,crti.o,crtend.o,crtn.o等,他们是标准库文件。这些代码设置C程序的堆栈等,然后调用main函数。他们依赖于操作系统,在裸板上无法执行,所以我们自己写一个。

所以,我们自己写的*.S汇编文件就是一个启动文件,它设置好堆栈后调用main函数。因此,我们不需要系统自带的启动文件。 因此 我们只需修改其Makefile文件:

%.o:%.carm-linux-gcc -Wall -nostdlib -O2 -c -o $@ $<%.o:%.S arm-linux-gcc -Wall -nostdlib -O2 -c -o $@ $< 

再次make 就ok啦 。

编译时“-nostdlib”的使用相关推荐

  1. GDAL2.1.1库在Ubuntu14.04下编译时遇到的问题处理方法

    不用作任何调整,直接在Linux下编译GDAL2.1.1源码的步骤是: $ ./configure $ make $ make install 非常简单, 这样也能正常生成gdal动态库.静态库,如果 ...

  2. MSBuild + MSILInect实现编译时AOP-改变前后对比

    实现静态AOP,就需要我们在预编译时期,修改IL实现对代码逻辑的修改.Mono.Cecil就是一个很好的IL解析和注入框架,参见编译时MSIL注入--实践Mono Cecil(1). 我的思路为:在编 ...

  3. Android系统编译时集成三方APK

    1. 前言 最近在学习Android系统开发,在开发过程中可能要到将三方apk集成到系统中的需求.目前我了解的方法有两种. 一种是在系统编译完毕之后,再将三方apk文件放置到系统目录之下.参考如何将a ...

  4. java AST 表达式_java 编译时注解-AST 抽象语法树简介

    AST 语法入门 以前使用 Lombok 一直觉得是一个很棒的设计,可以同时兼顾注解的遍历和运行的性能. 运行时注解一直因为性能问题被人诟病. 自己尝试写过一些框架,但是耗费了比较多的精力,因为 AS ...

  5. 什么叫编译时和运行时

    以前经常听说编译时和运行时的概念.但没太搞明白具体代表啥意思.后面花了点时间研究了下.总算知道个大概意思了. 编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能 ...

  6. Flutter编译时生成代码之 code_builder

    前言 之前学习原生开发的时候使用过各种编译自动生成模板代码的框架,例如ARouter,这些框架其实是借助了JavaPoet 这个框架来自动生成代码的,JavaPoet 可以在编译自动生成模板代码,在f ...

  7. [ c++] cmake 编译时 undefined reference to `std::cout‘ 错误的解决方案

    [ c++] cmake 编译时 undefined reference to `std::cout' 错误的解决方案 参考文章: (1)[ c++] cmake 编译时 undefined refe ...

  8. 编译时异常和运行时异常的区别

    编译时异常和运行时异常的区别 参考文章: (1)编译时异常和运行时异常的区别 (2)https://www.cnblogs.com/lxl57610/p/6716252.html (3)https:/ ...

  9. Xamarin.iOS编译时无法连接苹果系统

    Xamarin.iOS编译时无法连接苹果系统 错误信息:Unable to connect to Address='***.***.***.***' with User='***' 即使Visual ...

最新文章

  1. 继清华之后,北邮成立人工智能研究院
  2. Img与background的区别
  3. Android Studio 单刷《第一行代码》系列 04 —— Activity 相关
  4. Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)
  5. C#如何操作另一个窗体:[2]子窗体操作主窗体(转)
  6. Visual Studio 2019预览,净生产力
  7. 【CloudXNS教您几招】如何让多ip域名配置游刃有余?(2)
  8. 解决zabbix-4系列监控图形中文乱码问题
  9. ros之TF坐标转换
  10. 大数据可视化的应用场景
  11. 用简单Mask分类实现语义分割、实例分割“大一统”!FacebookUIUC开源MaskFormer
  12. osgearth加载mapbox在线高程数据
  13. cesium 漫游飞行_Cesium 之三维漫游飞行效果实现篇
  14. MIT License探讨
  15. 二、Win10如何解决svchost一直占用网速和内存?
  16. buff系统 游戏中_请问BUFF状态
  17. 光标快速移动到文档尾部_把光标移动到文件尾部的快捷键是什么呢?
  18. Java培训机构出来好找工作吗?
  19. 2023届【校招】安全面试题和岗位总结(字节、百度、腾讯、美团等大厂)
  20. 华师大计算机在线测试,华师大英语B在线测试.doc

热门文章

  1. Nike Barkley Foamposite Max “Rayguns”
  2. thinkphp5.1+ 使用 Redis 缓存
  3. js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)...
  4. 《Linux 性能及调优指南》1.6 了解Linux性能指标
  5. 《从paxos到zookeeper》学习笔记(一)
  6. Hibernate 一对一关联关系
  7. 【python】lxml处理命名空间
  8. 英语单词 voltage simulation synthesize junction asynchronous mega optimize
  9. React入门---react脚手架
  10. 查看LoadRunner脚本请求日志和服务器返回值方法