首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

gcc编译时,链接器安排的【虚拟地址】是如何计算出来的?

目录 问题描述 ELF 文件格式 地址转换和内存映射 Linux 中的内存重复映射 小结 问题描述 昨天下午,旁边的同事在学习Linux系统中的虚拟地址映射(经典书籍《程序员的自我修养-链接、装载与库》...例如下面这段C代码: 首先编译出32位的可执行程序(为了避开一些与主题无关的干扰因素,采用了静态链接): gcc -m32 -static test.c -o test 编译得到ELF格式的可执行文件...很久之前总结过这篇文章:《Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索》,里面详细总结了ELF文件的内部结构。...这里就不再赘述了,只要记住2点: 从编译器的角度看,ELF 文件是由很多的节(Section)组成的; 从程序加载器的角度看,ELF 文件是又很多的段(Segment)组成的; 其实它俩没有本质区别,只不过是链接器在链接阶段...再来看一下代码段的虚拟地址:在执行gcc指令的的时候,链接器把代码段的虚拟地址安排在0x0804_8000处: 也就是说:当CPU中(或者说程序代码中),使用0x0804_8000 ~ 0x0804_

1.3K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LVGL案例分享--手把手教你移植到T113-i国产工业开发板

    它是用C语言编写的,旨在高效和可定制,因此在各种微控制器平台和显示硬件上开发用户界面时备受欢迎。...积极的社区:LVGL有一个积极而支持性的社区,为其开发提供了资源并提供开发人员帮助。 跨平台:LVGL可以在各种微控制器平台上使用,适用于各种嵌入式系统。.../bin/arm-linux-gnueabi-gcc 由于工具链不支持编译选项-Wshift-negative-value,直接伤处对应编译选项。...因为没有鼠标的图标文件,所以把鼠标图标的配置注释掉 增加测试样例的编译,包含其构建脚本 LVGL编译验证 编译,在lvgl工程目录下进行构建,执行make命令 编译完之后,会在当前目录下生成demo可执行文件...验证,我们将可执行文件demo拷贝到板子上 在板子运行LVGL实例 运行结果: 总结 lvgl在Linux上的移植是比较简单快捷的;只需要修改几个配置文件,即可在目标上运行,对我们部署UI非常方便。

    55101

    LVGL案例分享--手把手教你移植到T113-i国产工业开发板

    它是用C语言编写的,旨在高效和可定制,因此在各种微控制器平台和显示硬件上开发用户界面时备受欢迎。...积极的社区:LVGL有一个积极而支持性的社区,为其开发提供了资源并提供开发人员帮助。 跨平台:LVGL可以在各种微控制器平台上使用,适用于各种嵌入式系统。.../bin/arm-linux-gnueabi-gcc 由于工具链不支持编译选项-Wshift-negative-value,直接伤处对应编译选项。...因为没有鼠标的图标文件,所以把鼠标图标的配置注释掉 增加测试样例的编译,包含其构建脚本 LVGL编译验证 编译,在lvgl工程目录下进行构建,执行make命令 编译完之后,会在当前目录下生成demo可执行文件...验证,我们将可执行文件demo拷贝到板子上 在板子运行LVGL实例 运行结果: 总结 lvgl在Linux上的移植是比较简单快捷的;只需要修改几个配置文件,即可在目标上运行,对我们部署UI非常方便。

    1.2K40

    【技术干货】GD32VF103C-START 入门

    一、序言 近期从创易栈中很荣幸获得了一块GD32VF103C-START 开发板,是基于RISC-V内核的32位通用微控制器,从这个网站我初步了解了这个芯片的特性,大家可以上网看看,内核是使用芯来科技Bumblebee...gd32官网中,提供了很多数据手册,用户手册、例程等资料,其中也给出了很多IDE的链接,比如SES,这个是segger公司开发的编译器,据芯来科技的文档,需要集成编译工具的,具体没测试;另外还有IAR的编译器...工具链都是免费开源的,其中在github中有存档的叫riscv-none-embed-gcc,而且想必芯来科技也是基于这个进行封装的,在IDE中,两个编译器的工具名字是不太一样的。...(2)gcc交叉编译器等路径设置,其实openocd是开源的调试软件,类似于jlink,英文:Open On-Chip Debugger,另外IDE也是可以设置jlink的路径的。...(3)Ld文件设置,类似于keil的分散脚本文件,被linker所调用。修改如下,最右侧双击修改即可,文件选择的是工程目录下的ld文件 (4)编译,最后就是编译了,生了elf文件。

    1.1K10

    0基础都能看懂的 Visual Studio Code(VScode)使用脚本一键配置安装CC++环境、编译运行Windows版本教程(内附脚本、安装包下载链接)

    前言 网上很多配置VScode的C、C++环境的教程,但是很多时候跟着从头到尾做了之后反而还是运行不了,于是笔者在网上翻阅资料后,发现了一个自动配置环境的脚本,亲测有效,大概5分钟就可以配置好环境了。...需要的下载链接 vscode 下载链接 VScode官网下载链接:https://code.visualstudio.com/Download# 这里建议下载System Installer 的版本,User...环境自动部署脚本 下载链接 链接:https://pan.baidu.com/s/191xXu1ueuqTaZlAFGEmrfg?...,容易在后期引起编译错误,很难处理解决!...3、运行脚本进行配置环境 打开名字是AutoVsCenv_WPF.exe的脚本。 然后直接就跟着步骤进行操作即可。如果在安装过程中出现错误,那么把自己的mingw文件夹删掉,重新进行安装即可。

    62710

    现象级爆红的开源显示框架——LVGL究竟蕴藏怎样的魔力

    ,使用少量内存(64kb Flash, 16kb RAM)支持操作系统、外部内存和GPU,但不是必需的单帧缓冲操作,甚至与高级图形效果用C编写的最大兼容性(c++兼容)模拟器在没有嵌入式硬件的PC上开始嵌入式...-Qt(Qt for MCUs)-Qt for MCUs是一个完整的图形框架和工具包,包含在微控制器上设置、开发和部署GUI所需要的一切。您可以在裸机或实时操作系统上运行应用程序。...优点复用您在微控制器上的现有技能;通过跨设备(从高端到大众设备)的技术一致性,来降低维护成本;在不影响图形性能的前提下,向微控制器演进以降低硬件成本;将传统解决方案升级到现代的跨平台图形工具包。...-emWin-emWin支持在任何嵌入式系统上创建高效、高质量的图形用户界面,emWin支持资源受限的微控制器的系统,运行令人惊叹的交互界面。...而要在哪吒上把LVGL玩起来也非常简单,只需要下载源码后使用编译命令编译源码:CC=/xxxx/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64

    7K10

    MM32F5270(STAR-MC1内核)适配RT-Thread

    概述 2022年4月,灵动微电子发布了搭载安谋科技“星辰”STAR-MC1处理器的全新高性能 MM32F5 微控制器系列。...该系列在内核、总线和外设配置等多个方面进行了创新,内核上更是首次搭载了 Armv8-M 架构的 “星辰” STAR-MC1 处理器。...答:MM32F5270是基于Armv8-M 架构的 “星辰” STAR-MC1 处理器。通过下图可以看出,我们可以参考CM33内核进行移植。 编译工具链?...修改libcpu的汇编分割--复制libcpu的gcc汇编代码到keil的汇编代码中。从移植须知的第二点可知,AC6的汇编风格是和GUN一样的。所以直接拷贝。...修改链接脚本--RT-Thread的动态内存堆是在ZI段结尾处到RAM尾部,而board.h中指向ZI段结尾处的变量(Image RW_IRAM1 ZI 替换mm32的库--将mm32f5270的sdk

    1K10

    【嵌入式】嵌入式项目手动与自动化构建流程详解

    .hex 文件:可选的 HEX 格式文件,同样用于烧录。 linker_script.ld:链接脚本,定义内存布局和段的分配等。用于告诉链接器如何安排程序的代码和数据在内存中的位置。...arm-none-eabi-gcc,适用于 ARM 架构的交叉编译器。...AFLAGS:设置汇编编译选项(例如,启用调试信息)。 LDFLAGS :设置链接器选项。 -T linker_script.ld:指定链接脚本。...4.3 编译 手动操作:开发人员手动运行编译器(如 gcc)将源代码(.c 文件)编译成目标文件(.o 文件),例如 main.o。...自动化操作:Makefile 中定义了链接规则,运行 make 时,自动调用链接器将所有目标文件链接成最终的可执行文件。

    11810

    Arch下ESP8266开发环境搭建篇

    ESP8266EX微控制器集成了Tensilica L106 32位RISC处理器,可实现极低的功耗并达到160 MHz的最大时钟速度。...API和用于操作工具链的脚本 文本编辑器,用C语言编写程序(Projects),例如vscode,escaplisw 该ESP8266EX板本身和一个USB电缆将其连接到PC ?...此过程可以概括为四个步骤: 配置项目并编写代码 项目的编译并将其链接以构建应用程序 将应用程序刷入(上传)到ESP8266EX 监视/调试应用程序 Linux工具链的标准设置 安装先决条件 要使用ESP8266..._RTOS_SDK进行编译,您需要获取以下包: sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial...运行以下命令以验证是否PATH正确设置: printenv PATH ?

    1.1K30

    基础环境搭建,这一篇就够了!

    关于gcc和make之间的区别与联系: gcc是编译器、而make不是,make是依赖于Makefile来编译多个源文件的工具,在Makefile里同样是用gcc(或者别的编译器)来编译程序; gcc是编译一个文件...GCC GCC(GNU Compiler Collection)是由GNU开发的编程语言译器。...版本: 二、Make 用来维护程序模块关系和生成可执行程序的构建工具,它可以根据程序模块的修改情况重新编译链接生成中间代码或最终的可执行程序。...,gcc4.8.5可能会编译不过,可以通过上述提供的升级gcc的方法将gcc升级到7.3.1,再次执行编译安装。...,前端程序运行环境:nodejs,数据库环境:mysql、redis、mongodb,容器运行环境:docker,编译工具:gcc、make,web应用服务器:Tomcat,代理转发工具:nginx,基本上市面上所有程序的运行都离不开这些基础环境

    2.7K40

    AIoT应用创新大赛-用 CLion 获取更好的代码补全与跳转体验

    IDE 提供了很多嵌入式开发的必备功能,如编译工具链、代码编辑器、调试器、固件下载工具,但在代码编辑器上较为薄弱,主要体现在无法自动补全,即输入函数开始的几个字符,自动补全函数名(IDE 可以实现函数跳转...换用编辑器时,必须存在 makefile 才能找到头文件路径、源码路径、链接库路径,进而做代码分析以便支持代码跳转与补全。...-n make 编译数据库的文件内容示意如下: 因为 makefile 默认用 arm-none-eabi-gcc 工具链,在 CLion 中暂时未找到支持方法,故可通过批量替换为 gcc的方式避免加载工程出错...Q&A 为什么不在 CLion 中直接使用 makefile CLion 确实已经支持了 makefile 工程,但不支持 MCUXpresso IDE 生成的 makfile。...复制全量的编译脚本到源码目录工作量太大,故考虑使用编译数据库的方式。

    2.2K70

    升级GCC版本到11.1

    下载GCC11.1源码 GCC的源码仓库地址为: https://github.com/gcc-mirror/gcc ,在浏览器打开这个网址后,不要急于下载,先选择gcc的版本,如下图所示: image.png...安装依赖库 新的GCC源码内置了依赖库的获取脚本, GCC所依赖的mpfr, gmp, mpc, isl都可以使用内置脚本直接获取, 比老版本简单非常多, 在GCC目录下, 执行: ....LD_LIBRARY_PATH的问题 如果代码没有全部切换到11.1, 那我们还需要额外的一步操作才能让gcc11.1编译出的程序正常的运行: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH...GDB的问题 GCC11.1开始, 要求使用支持C++11的编译器进行编译, 可能是由于这个改变, 生成的App可以正常运行, 但不能挂接GDB, 表现是用GDB启动生成的App就直接Crash,...或者自行运行的时候, 需要正确指定一下GDB的版本, 检查GDB的版本: image.png 更换GDB版本后我们尝试调试GCC11的程序, 已经正常了.

    3.5K40

    Theano 中文文档 0.9 - 5.3 Windows安装说明

    GCC Theano C代码编译器目前需要一个GCC安装。我们使用了为32位和64位平台提供的构建TDM GCC。...对于32位MinGW:从MinGW文件下载最新版本的自动 MinGW 安装程序 t>(mingw-get-inst)并安装它(你应该安装所有可选组件,但不需要Objective C和Ada编译器)...GCC Theano C代码编译器目前需要一个GCC安装。我们使用了为32位和64位平台提供的构建TDM GCC。...对于32位MinGW:从MinGW文件下载最新版本的自动 MinGW 安装程序 t>(mingw-get-inst)并安装它(你应该安装所有可选组件,但不需要Objective C和Ada编译器)...对于32位MinGW:从MinGW文件下载最新版本的自动 MinGW 安装程序 t>(mingw-get-inst)并安装它(你应该安装所有可选组件,但不需要Objective C和Ada编译器)

    1.2K20

    iOS开发你不知道的事-编译&链接

    : gcc –c hello.c –o hello.o 链接(linking)   链接通常是一个让人比较费解的过程,为什么汇编器不直接输出可执行文件而是输出一个目标文件呢?...下面让我们来看看怎么样调用ld才可以产生一个能够正常运行的Hello World程序: 注意默认情况没有gcc / 记得 : $ brew install gcc 链接相应的库 [1240] 下面在贴出我们的写出的源代码是如何变成目标代码的流程图...iOS程序-详细编译过程 1.写入辅助文件:将项目的文件结构对应表、将要执行的脚本、项目依赖库的文件结构对应表写成文件,方便后面使用;并且创建一个 .app 包,后面编译后的文件都会被放入包中; 2.运行预设脚本...:Cocoapods 会预设一些脚本,当然你也可以自己预设一些脚本来运行。...这些脚本都在 Build Phases中可以看到; 3.编译文件:针对每一个文件进行编译,生成可执行文件 Mach-O,这过程 LLVM 的完整流程,前端、优化器、后端; 4.链接文件:将项目中的多个可执行文件合并成一个文件

    57700

    网贷平台老板跑路,程序员这波操作很溜;微软开源TextWorld;刘强东回应比阿里优势:我们只买真货

    消息很快引起平台用户的担心,但不少人还是心存侥幸:“是不是软件后台被黑了?”但同天下午,“永利宝”官方微博就再次证实了这一消息。 ‍ ?...(详情:https://gitee.com/alipay/sofa-rpc) 3、SUSE 开发者提议在 GCC 编译器中用 Python 替代 AWK‍ 日前,一位 SUSE 开发者向 GCC 开发团队发送了一封邮件...,希望允许在 GCC 编译器代码库中使用一门脚本语言(Python),这主要是为了替代现有的 AWK 语言。...TextWorld 还可运行现有的基于文本的游戏,如 Zork,用来评估 AI 代理在复杂设置中的表现。...就用户数据而言,雅虎当时也表示,用户可以在接下来的 6 个月内从 Messenger 上下载自己的聊天记录。文件会传到用户的电脑或其他设备上,但不会传到其他消息应用上。‍

    51620

    【Linux】深度解析与实战应用:GCCG++编译器入门指南

    GCC以其高效、灵活和跨平台的特点赢得了开发者的青睐。本文将详细介绍GCC中的C编译器gcc和C++编译器g++的基本使用方法和编译过程。   ...gcc和g++的一些常用的选项包括: -E:仅进行预处理,不进行编译和汇编。 -S:生成汇编代码,但不进行汇编和链接。 -c:生成目标代码(.o文件),但不进行链接。...动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,由操作系统动态加载。这样可以节省系统的开销。...GCC/G++的-g选项 -g选项是GCC/G++编译器的一个非常关键的选项,它告诉编译器生成调试信息。...默认情况下(即不指定-g选项时),GCC/G++会以类似于Release模式的方式编译程序,即进行优化但不包含调试信息。如果你想要使用GDB等调试工具来调试你的程序,你需要在编译时加上-g选项。

    21810

    ERROR: Unable to find the development tool cc in your path; please make sure tha

    我们将了解这个错误的原因以及如何纠正它。错误原因这个错误是由于在系统的环境路径(PATH)中找不到名为cc的开发工具所致。在大多数情况下,cc是一个符号链接,指向系统上的默认C编译器(如gcc)。...重新运行命令which cc来确认符号链接已经正确创建。 现在,您应该能够解决这个错误并成功编译您的代码了。...请注意,这仅是一个示例代码,具体的安装和配置操作可能因操作系统的不同而有所差异。在实际使用中,请根据您的操作系统和软件环境进行调整。gcc是GNU编译器集合的核心组件之一。...它是一个开源的编译器套件,用于编译和链接C、C++、Fortran等编程语言的源代码。安装gcc可以让我们能够本地编译和运行C和C++的程序。...通过正确安装gcc,我们就可以在本地进行C和C++的编译和运行,为开发和调试代码提供了便利。

    2.9K21

    让Python代码更快运行的 5 种方法

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足之 处,那就是执行效率和性能不够亮。...PyPy 使用了Just-in-Time(JIT)即时编译器,即动态编译器,与静态编译器(如gcc,java等)不同,它是利用程序运行的过程的数据进行优 化,拥有同谷歌Chrome V8 JavaScript...相关链接:http://pypy.org/ Pyston Pyston 是一款Dropbox推出的新的基于JIT的Python实现,使用LLVM编译器实现代码解析与转换。...虽然这限制了它的可移植性,但不可否 认这个转换的速度获得了肯定。 相关链接:http://nuitka.net/ Cython Cython 是Python 的C语言扩展。...实际上Cython的语法基本上跟 Python一致,而Cython有专门的编译器:先将 Cython代码转变成C(自动加入了一大堆的C-Python API),然后使用C编译器编译出最终的Python

    1.4K60

    S3C2440② | arm-linux-gcc交叉编译工具链

    1.为什么需要交叉编译工具 宿主机运行的是标准Linux操作系统,编译出的程序却需要在目标处理器(S3C2440@ARM920T)上跑,这就叫交叉编译,编译器叫做交叉编译器。...之前我们已经使用过gcc编译Linux本地主机的程序(Linux C语言编程(上篇) | gcc的使用),而我们现在需要的这个编译器的目标系统是ARM,不运行操作系统,仅运行裸机程序,需要在Linux主机上编译出可以运行在...S3C2440@ARM920T芯片上跑的程序,所以不能使用这个编译器,需要使用arm-linux-gcc交叉编译器。...2.arm-linux-gcc的安装 arm-linux-gcc是ARM官方基于Linux平台的arm编译器,其特点有: 开源免费 支持的ARM芯片多 功能强大,稳定 2.1.下载arm-linux-gcc...4.嵌入式开发中目标文件的链接 在使用交叉编译工具链时,最重要的过程是链接过程: 简单的程序链接可以使用一些参数指定; 复杂的程序链接需要使用链接文件.ld指定。

    4K40
    领券