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

gcc在Ubuntu上安装和使用「建议收藏」

安装 使用命令sudo apt install build-essential,该命令将安装一堆新包,包括gcc,g ++和make。...要验证GCC编译器是否已成功安装,可以使用gcc -v命令打印GCC版本: 使用 gcc 命令格式如下: gcc [选项] [文件名字] 主要选项如下: -c: 只编译不链接为可执行文件,编译器将输入的...编译流程 GCC 编译器的编译流程是:预处理、编译、汇编和链接。 预处理就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。...Makefile的引入和使用 我们完成这样一个小工程,通过键盘输入两个整形数字,然后计算他们的和并将结果显示在屏幕上,在这个工程中我们有 main.c、 input.c 和 calcu.c 这三个 C...文件和 input.h、 calcu.h 这两个头文件。

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

    【汇编语言】和loop指令(二)——在Debug中跟踪用loop指令实现的循环程序

    但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计算机底层工作原理,提升代码效率,尤其在嵌入式系统和性能优化方面有重要作用。...ffff:0006 单元中的数是一个字节型的数据,范围在0-255之间,则用它和3相乘结果不会大于65535,可以在dx中存放下。...Debug对这个程序的循环程序段进行跟踪,现在有这样一个问题:前面的条指令,即标号s前的指令,已经确定在逻辑上完全正确,我们不想再一步步地跟踪了,只想跟踪循环的过程。...其实,通过这两次循环过程,已经可以确定循环程序段在逻辑上是正确的。 我们不想再继续一步步地观察循环的过程了,怎样让程序向下执行呢?继续像从前那样使用t命令?...上图中,在遇到“loop 0012”时,用p命令执行,Debug 自动重复执行“loop 0012”和“add dx,ax”两条指令,直到(cx)=0。

    10810

    C++代码和可执行程序在x86和arm上的区别

    X86 主导台式机、工作站、笔记本电脑和服务器市场,最初的芯片是 16 位,后来的版本是 32 位和 64 位。 ARM 在速度和长电池寿命方面超过了英特尔处理器。...它们可以在某些关键方面进行比较,例如它们采用的指令集、功耗、软件和应用程序。 指令系统 ARM 处理器属于精简指令集计算 (RISC) 架构。...RISC 是同类中最新的一种,其中活动被拆分(简化)为简单指令,一条指令在一个时钟周期内执行,数百万条此类指令在一秒钟内以更快的速度处理。...虽然它必须执行多条指令,但由于其强大的处理器和流水线,整体速度更高。 X86 处理器遵循复杂指令集计算 (CISC) 架构。 复杂的指令在多个时钟周期中的单个步骤中处理。...软件 配备 ARM Process 的设备可在专为 ARM 开发的 Android 操作系统上运行。

    1.4K10

    (译)用 Notary 和 OPA 在 Kubernetes 上使用内容签名

    在 Kubernetes 上使用策略对部署行为进行限制,仅允许运行有签名的镜像。...主要内容如下: 完成示例的先决条件 Notary 和镜像信任的基本概念 在 Kubernetes 上安装 Kubernetes OPA 和 Admission Control 的基本概念 在 Kubernetes...在 Kubernetes 上实施内容信任 现在我们已经可以签署镜像生成信任数据了,拼图还差最后一块——在 Kubernetes 上实施内容信任策略。...在 Kubernetes 上安装 OPA 我们希望在 Kubernetes 上借助 OPA/Rego 的弹性策略实现内容信任机制。然而在开始之前,首先要在集群上部署 OPA。...总结和展望 最终,我们成功地在 Kubernetes 集群上,无需改动部署习惯的情况下,实现了内容信任机制,除了这个,OPA 还能做很多其它的校验工作。

    2.5K31

    一次搞定 Arm Linux 交叉编译

    程序最后运行的环境变了,比如你的开发板是基于 Arm 的——程序在 X86 上编辑,编译,最终运行在另一个和 X86 完全不同的架构的 Arm 芯片上。 ?...但是这样有一个问题,X86、Arm、MIPS、RISC-V 这些芯片,它们的指令集是由不同的组织或者公司设计的,彼此并不兼容——Arm 和 MIPS 的 CPU 无法运行以 X86 的指令集编码的程序,...所以我们要在 X86 的电脑上编译出能够在 Arm 上运行的程序,我们必须明确告诉编译器,编译生成的可执行文件需要以 Arm 指令集的标准编码。...另外需要补充一点的是,32 位的 Arm 和 64 位的 Arm,它们的指令集是不同的,所以需要使用不同的工具链。...当然,Arm64 为了保证前向兼容,提供了一个 32 位的兼容模式,所以我们用 arm-linux-gnueabi-gcc 编译的应用程序也是可以直接在Arm64 的系统上运行的,但是 Linux Kernel

    29.3K63

    交叉编译学习笔记(二)——交叉编译器的命名规则

    交叉编译学习笔记(二)——交叉编译器的命名规则 在进行嵌入式开发过程中,用到的交叉编译器经常是这样的名称: arm-linux-gcc arm-none-linux-gnueabi-gcc arm-linux-gnu-gcc...EABI与ABI的主要区别,是应用程序代码中允许使用特权指令,不需要动态链接,并且使用更紧凑的堆栈帧组织用来节省内存。广泛使用EABI的有Power PC和ARM。...,分别适用于 armel 和 armhf 两个不同的架构,armel 和 armhf 这两种架构在浮点运算上采用了不同的策略(有 fpu 的 arm 才能支持这两种浮点运算策略)。...架构(对应编译器是arm-linux-gnueabi-gcc)的默认值,用 fpu 计算,但传参数时使用普通寄存器。...(2) 使用 arm-linux-gnueabi-gcc 编译 输入指令如下: arm-linux-gnueabi-gcc -v mfloat.c 输出信息如下: COLLECT_GCC_OPTIONS

    4.7K50

    Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9

    输入指令如下: source /root/.bashrc 检验环境变量生效的方法是:在root权限下,终端中输入arm,然后按Tab键,出现图示如下: ?...只要终端显示出arm-linux-gcc-4.3.2, arm-none-linux-gnueabi-g++, arm-none-linux-gnueabi-gcc, arm-none-linux-gnueabi-gcc.../build 在build文件夹中,用vim或gedit新建文件toolchain.cmake: gedit toolchain.cmake 在toolchain.cmake文件中填入如下内容: ###...五、交叉编译后的OpenCV移植到ARM上 1、配置pkg-config 参考地址:http://blog.csdn.net/luotuo44/article/details/24836901 大家应该都知道用第三方库...平常都是这样用pkg-config的: gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main 上面的编译命令中,`pkg-config --cflags

    9.5K90

    汇编语言之GNU ARM

    方便交叉编译 GCC劣势: 工具基本采用命令行方式,学习和使用门槛较高 接下来我们要学习的就是GNU计划众多的产物之一GNU FOR ARM 汇编器与指令集 什么是汇编器 将汇编语言翻译成机器码的工具...ARM官方原生的汇编器,集成在了ADS工具上,适用于ARM架构,我们也一般称之为ADS汇编器 两种ARM汇编器的各自用途 ARMASM汇编器:一般用于windows平台 GAS汇编器:支持windows...GUN工具全部免费,方便开发者进行使用 如果你是从事android开发,有兴趣可以去翻NDK r17以下版本的库,里面用的编译工具就是GCC GNU ARM开发环境搭建 我们需要准备以下两个工具: GCC...编译套件 安卓模拟器 GCC编译套件根据cpu架构和操作系统的不同,又分为了很多子类: 纯ARM裸机: 对应arm-none-eabi工具包 ARM架构+Linux操作系统:对应arm-none-linux-eabi...工具包 由于接下来我们选择在安卓模拟器上进行开发学习,因此我们选择arm-none-linux-eabi这套工具来进行代码的编译 工具下载 GCC工具的具体使用 伪指令和伪操作 注释 段的声明 代码段

    2.2K30

    ARM交叉编译OpenCV错误总结

    经过多次的交叉编译全都失败,都不能成功的在目标板上运行简单的OpenCV的Demo程序。最后都是在对板子失去希望的时候,破罐破摔的直接用ARM板自己编译。...笔者把编译后的目录opencv-install放置在和PC机相同的路径(即/usr/local/arm/opencv-install/) 之后使用arm-linux-gnueabihf-g++编译Demo...,或者是x86的32/64位系统版本,或者是直接就没有用arm-linux-gcc系列的编译器之类的原因,况且我用的也是arm平台的编译器(笔者在PC机端用的编译器是arm-none-linux-gcc...-4.3.2,在BeagleBone Black板上的编译器是4.6.3版本的arm-linux-gnueabihf-gcc),虽然版本不同,但笔者认为在PC机上用的编译器应该是被BBB的编译器向下兼容的...对于这种情况,笔者感觉只有两种操作可能解决: 1、用4.6.3版本的arm-linux-gnueabihf-gcc编译相关库;(其实也尝试过,但是在编译ffmpeg源码时貌似出了问题…… ) 2

    3.1K90

    linux 编译汇编,linux下的汇编教程

    基于ARM平台的工具分别为 arm-linux-as、arm-linux-gcc、arm-linux-g++、arm-linux-ld和arm-linux- objcopy。...GNU工具的开发流程如下:编写C、C++语言或汇编源程序,用gcc或g++生成目标文件,编写连接脚本文件,用连接器生成最终目标文件(elf格式),用二进制转换工具生成可下载的二进制代码。...(2)用gcc或g++生成目标文件 如果应用程序包括多个文件,就需要进行分别编译,最后用连接器连接起来。...调试工具 Linux下的GNU调试工具主要是gdb、gdbserver和kgdb。其中gdb和gdbserver可完成对目标板上Linux下应用程序的远程调试。...它是 FAP 上的伪指令,FAP (Fortran Assembly [-er?] Program) 是指 IBM 704-709-7090-7094 这种机型的组译器。

    3.5K31

    【保姆级教程】Docker服务在双架构(X86和ARM)编译统一实践

    交叉编译工具可以让我们在一台机器上编译出多个不同操作系统和架构的程序。...在Ubuntu系统中,我们可以使用以下命令来安装交叉编译工具: sudo apt-get install gcc-arm-linux-gnueabihf sudo apt-get install gcc-mingw-w64...这些关键字可以让我们在不同的操作系统和架构中使用不同的链接库和编译选项,从而确保我们的程序可以在不同的操作系统和架构中正常运行。 #cgo指令符是用于在Go语言中调用C语言函数和库的关键字。...它可以让我们在Go语言中使用C语言的函数和库,从而扩展Go语言的功能。在进行cgo多架构编译时,我们可以使用#cgo指令符来指定不同操作系统和架构下的编译选项。...在进行多架构编译时,我们可以使用#cgo CFLAGS指令符来指定不同操作系统和架构下的编译选项。

    1.9K60

    【保姆级教程】Docker服务在双架构(X86和ARM)编译统一实践

    交叉编译工具可以让我们在一台机器上编译出多个不同操作系统和架构的程序。...在Ubuntu系统中,我们可以使用以下命令来安装交叉编译工具:sudo apt-get install gcc-arm-linux-gnueabihfsudo apt-get install gcc-mingw-w64...这些关键字可以让我们在不同的操作系统和架构中使用不同的链接库和编译选项,从而确保我们的程序可以在不同的操作系统和架构中正常运行。图片#cgo指令符是用于在Go语言中调用C语言函数和库的关键字。...它可以让我们在Go语言中使用C语言的函数和库,从而扩展Go语言的功能。在进行cgo多架构编译时,我们可以使用#cgo指令符来指定不同操作系统和架构下的编译选项。...在进行多架构编译时,我们可以使用#cgo CFLAGS指令符来指定不同操作系统和架构下的编译选项。

    7.6K51

    STM32高级开发——gcc-arm-none-eabi

    (工具链:一般由编译器、连接器、解释器和调试器组成)关于它的调试功能这个比较复杂,我们之后慢慢来讲。 gcc-arm-none-eabi是GNU项目下的软件,是一个面向裸机arm的编译器。...下载安装gcc-arm-none-eabi 首先打开gcc-arm-none-eabi项目的官网: https://launchpad.net/gcc-arm-embedded/+download 在写这篇文章时它的软件版本已更新到了...随后双击解压后的文件进入 gcc-arm-none-eabi-5_4-2016q3 -> bin 这个文件夹中的便是软件的执行文件了,不过他们都是通过指令行调用的,但是在终端调用之前,我们需要把软件的路径置于系统的环境变量之下...还有个检查的方法就是,使用指令查看当前系统PATH变量的值,查看是否PATH中是否有刚刚设置的路径: $ echo $PATH 1 实际上Ubuntu的软件源中是有gcc-arm-none-eabi...gcc-arm-none-eabi工具链工具使用方法及介绍 在我们安装好gcc-arm-none-eabi后,我们可以在终端中输入指令来调用gcc-arm-none-eabi的功能了,那么这个工具链下茫茫多的执行软件都是做什么的呢

    1.4K30

    linux_aarch64_qt环境搭建

    平台环境: ubuntu 16.04: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) aarch64 gnu gcc版本: gcc-linaro...ARMv7-A架构是ARM架构的第七代,支持32位指令和地址。它是2011年前的大多数ARM芯片所采用的架构,包括Cortex-A7、Cortex-A9和Cortex-A15等。...armv8是ARMv8-A指令集架构的缩写,其中“A”表示“应用程序级别”。ARMv8-A架构是ARM架构的第八代,支持32位和64位指令和地址。...aarch64是ARMv8-A指令集架构的64位模式,也称为ARM64。它支持64位指令和地址,并提供更高的寄存器数量和更强大的指令集,因此可以更有效地处理大量数据。...只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同。用host指定运行主机。 .

    30910

    变量访问被ARM架构安排的明明白白

    举例来说,同样是访问外设寄存器,过去在8位和16位机时代,人们喜欢给每一个寄存器都单独绑定地址——当作全局变量来访问,而现在Cortex在架构上更鼓励底层驱动以寄存器页(也就是结构体)为单位来定义寄存器...).s arm-none-linux-gnueabi-gcc -O1 -g -S -o $(TARGETC).s $(TARGETC).c arm-none-linux-gnueabi-ld $(...使用literal pool (文字池)的原因 当想要在一条指令中使用一个 4字节长度的常量数据(这个数据可以是内存地址,也可以是数字常量)的时候,由于ARM指令集是定长的(ARM指令4字节或Thumb...指令2字节),所以就无法把这个4字节的常量数据编码在一条编译后的指令中。...).dis clean: rm -rf *.o *.elf *.dis *.bin 仍然用第二章的main.c文件 ?

    87730

    嵌入式Linux系列第2篇:运行Hello World

    复习上一篇文章的操作,在/home/topsemic文件夹下新建一个hello文件夹,用gedit 打开hello.c ,编辑代码保存。 ? ?...第二步,编译代码,使用gcc指令,gcc是linux系统集成的编译器,这个一装完Ubuntu系统里面就有。最简单的用法是gcc hello.c,它会默认生成a.out ?...05.交叉编译 如何让hello world程序在我的NUC972板子上运行呢? 第一步:交叉编译,也就说在PC机的Ubuntu系统里编译一个能在NUC972平台上运行的程序。...soure指令的功能是使Shell读入指定的Shell程序文件并依次执行文件中的所有语句。 在终端上输入命令 arm- 再按Tab键,可以看到下图,说明环境变量设置成功了 ?...我们在用file指令查看该文件的类型,可以看到它是ARM平台下的。 ? 同时用file看下第3节编译出来的hello,可以看到它是运行在x86-64平台下的。 ?

    2.1K30

    实用技能分享,充分利用内联函数,内联汇编,内部函数和嵌入式汇编提升代码执行效率和便捷性(2021-12-17)

    因为这样才能发挥内联的优势: LL库这里用的关键字是__STATIC_INLINE,这个是ARM的CMSIS软件包专门做的定义方式,对MDK,IAR和GCC都做了适配,通用。...: 对应IAR头文件 比如我们常用的函数__set_MSP设置主堆栈指针,实现如下: 又比如32bit变量赋值的原子操作,由于要用到互斥指令ldrex和strex,通过内联汇编,就可以方便的在各种编译器里实现...内部函数看起来像一个普通的函数调用,但它实际上是编译器识别的内置函数。...内部函数编译为内联代码,作为单个指令或作为一小段指令序列,一般用双下划线 (__) 标记 针对内部函数,ARM的CMSIS软件包也是做了一大批,主要分两类: 1、一类是CPU使用的内部函数,部分截图...2、另一类是SIMD指令,这个在CMSIS-DSP库里面被大量应用,主要使用操作加速,下面是部分截图: 四、嵌入式汇编: 现在xxxx.S启动文件和各种RTOS的Port移植,都是采用的汇编文件(或者内联汇编

    1.3K30

    Ubuntu上搭建arm虚拟运行环境

    没有开发板,如何调试运行arm程序? 本文主要讲解如何在Ubuntu上搭建arm交叉编译、运行环境。...一、安装交叉编译工具链 安装交叉编译工具链arm-linux-gnueabihf-gcc: sudo apt-get install gcc-arm-linux-gnueabihf 安装完毕,可以看到系统上已经新增了这么多交叉编译工具...三、通过gdb调试arm程序 在Ubuntu上用gdb调试arm程序的原理:qemu端作为gdb server启动可执行程序,另一端作为gdb client连接gdb server,进行本地远程调试。...该指令运行后,当前窗口会被阻塞住。...qemu-arm -g 1234 a.out 新开一个命令行窗口,启动gdb client,进入gdb交互界面: gdb-multiarch a.out 在gdb交互界面输入以下内容就可以连接到

    5.3K31

    Arm放弃了自家的汇编语法?改投GNU了?

    ARM系列文章,请点击以下汇总链接: 《从0学arm合集》 一、MDK和GNU伪指令区别 我们在学习汇编代码的时候经过会看到以下两种风格的代码: gnu代码开头是: .global _start...为了大家不要把过多精力浪费在暂时没用的知识上,下面我们只讲GNU风格汇编。 二、GNU汇编书写格式: 1....文件列表 main.c和start.s和上一节一致。...在Linux OS上,为了运行可执行文件,他们是遵循ELF格式的,通常gcc -o test test.c,生成的test文件就是ELF格式的,这样就可以运行了,执行elf文件,则内核会使用加载器来解析...在Embedded中,如果上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF文件的符号表字符表之类的section,运行碰到这些,就会导致失败,如果用objcopy生成纯粹的二进制文件

    2.3K30
    领券