首页
学习
活动
专区
工具
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.2K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

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

    43101

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

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

    96040

    【技术干货】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文件。

    1K10

    现象级爆红开源显示框架——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

    4.6K10

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

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

    39010

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

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

    96810

    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.5K40

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

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

    2.1K70

    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.链接文件:将项目中多个可执行文件合并成一个文件

    56400

    升级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.4K40

    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

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

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

    9810

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

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

    50920

    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.3K21

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

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

    1.3K60

    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

    如何使用脚本完成CRC和填充值自动完成

    摘要 恩智浦MPC架构微控制器使用开发环境IDE是S32DS ,该IDE使用GNU GCC工具链没有提供对编译结果CRC校验和自动生成工具,所以需要我们制作一个脚本自动生成和填充,脚本调用Srecord...Srecord简介 为了实现对S32DS IDE应用工程编译结果生成S19文件进行数据填充和CRC校验和自动生成,满足bootloader开发需求,我们借助功能强大嵌入式MCU Flash编程文件编辑处理工具...--Srecord, 制作一个bat批处理脚本脚本中调用命令请参照srecord文档说明,这里不在赘述。...将制作完成脚本放入工程编译目录下,如debug目录下,双击脚本即可完成填充, 如果想自动让IDE调用脚本生成填充值,需要做一些配置,这部分功能还在测试中,目前只支持手动双击调用脚本。...如果有的电脑因为权限问题不能正确执行脚本,请将制作脚本放入srecord解压bin目录下,将编译.srec或者s19文件也放入bin目录下,双击脚本即可完成生成填充好文件,如下图所示 可以试用

    43230
    领券