当前位置:首页 » 编程软件 » armgcc多核编译选项

armgcc多核编译选项

发布时间: 2022-05-05 07:27:18

❶ 关于ARM arm-linux-gcc编译器的疑问

首先编译器的选择跟处理器相关,所以arm的处理器一般只能采用arm相关的编译器。所以严格上来讲,根据所采用的ARM芯片的不同而采用不同版本的编译器也是对的,而且也建议这样做。但是编译器一般是向下兼容的,如果你的程序简单,你用了老版本的编译器编译,当然也可以在新处理器下运行咯,我记得我用gcc编译的程序,也可以在atmel9260的板子上运行呢。

❷ (arm, linux): gcc的编译选项“-MT $(*F).o -MF dep/$(@F).d”是什么意思

你这是makefile里面截出来的吧。。。。。。你问的那些不是gcc的命令,是make的自动变量。。。。。。。。。。。。。。。。。

$(*F)是目标的文件名。比如你的目标是src/foo.c,那$(*F)就是foo

$@代表make中的目标文件集合(所有目标文件),$(@F)是指这个目标文件集合里面所有的不包含路径的文件名。比如你的$@是src/foo.o,那$(@F)就是foo.o

❸ arm-linux-gcc怎么编译文件

可以使用gcc命令进行编译:

例子:

gcc -o hello hello.c #在这里hello.c是源文件,hell为目标输出文件

通过编译器编译主要是经过:预处理,汇编,编译和链接的过程;

❹ 如何设置NDK的编译选项

1. 概述

首先回顾一下 Android NDK 开发中,Android.mk 和Application.mk 各自的职责。

Android.mk,负责配置如下内容:

(1) 模块名(LOCAL_MODULE)

(2) 需要编译的源文件(LOCAL_SRC_FILES)

(3) 依赖的第三方库(LOCAL_STATIC_LIBRARIES,LOCAL_SHARED_LIBRARIES)

(4) 编译/链接选项(LOCAL_LDLIBS、LOCAL_CFLAGS)

Application.mk,负责配置如下内容:

(1) 目标平台的ABI类型(默认值:armeabi)(APP_ABI)

(2) Toolchains(默认值:GCC 4.8)

(3) C++标准库类型(默认值:system)(APP_STL)

(4) release/debug模式(默认值:release)

由此我们可以看到,本文所涉及的编译选项在Android.mk和Application.mk中均有出现,下面我们将一个个详细介绍。

2. APP_ABI

ABI全称是:Application binary interface,即:应用程序二进制接口,它定义了一套规则,允许编译好的二进制目标代码在所有兼容该ABI的操作系统和硬件平台中无需改动就能运行。(具体的定义请参考网络或者维基网络)

由上述定义可以判断,ABI定义了规则,而具体的实现则是由编译器、CPU、操作系统共同来完成的。不同的CPU芯片(如:ARM、Intel x86、MIPS)支持不同的ABI架构,常见的ABI类型包括:armeabi,armeabi-v7a,x86,x86_64,mips,mips64,arm64-v8a等。

这就是为什么我们编译出来的可以运行于Windows的二进制程序不能运行于Mac OS/Linux/Android平台了,因为CPU芯片和操作系统均不相同,支持的ABI类型也不一样,因此无法识别对方的二进制程序。

而我们所说的“交叉编译”的核心原理也跟这些密切相关,交叉编译,就是使用交叉编译工具,在一个平台上编译生成另一个平台上的二进制可执行程序,为什么可以做到?因为交叉编译工具实现了另一个平台所定义的ABI规则。我们在Windows/Linux平台使用Android NDK交叉编译工具来编译出Android平台的库也是这个道理。

这里给出最新 Android NDK 所支持的ABI类型及区别:

下面是我总结的一些常用的CFLAGS编译选项:

(1)通用的编译选项

-O2 编译优化选项,一般选择O2,兼顾了优化程度与目标大小

-Wall 打开所有编译过程中的Warning

-fPIC 编译位置无关的代码,一般用于编译动态库

-shared 编译动态库

-fopenmp 打开多核并行计算,

-Idir 配置头文件搜索路径,如果有多个-I选项,则路径的搜索先后顺序是从左到右的,即在前面的路径会被选搜索

-nostdinc 该选项指示不要标准路径下的搜索头文件,而只搜索-I选项指定的路径和当前路径。

--sysroot=dir 用dir作为头文件和库文件的逻辑根目录,例如,正常情况下,如果编译器在/usr/include搜索头文件,在/usr/lib下搜索库文件,它将用dir/usr/include和dir/usr/lib替代原来的相应路径。

-llibrary 查找名为library的库进行链接

-Ldir 增加-l选项指定的库文件的搜索路径,即编译器会到dir路径下搜索-l指定的库文件。

-nostdlib 该选项指示链接的时候不要使用标准路径下的库文件

(2) ARM平台相关的编译选项

-marm -mthumb 二选一,指定编译thumb指令集还是arm指令集

-march=name 指定特定的ARM架构,常用的包括:-march=armv6, -march=armv7-a

-mfpu=name 给出目标平台的浮点运算处理器类型,常用的包括:-mfpu=neon,-mfpu=vfpv3-d16

-mfloat-abi=name 给出目标平台的浮点预算ABI,支持的参数包括:“soft”, “softfp” and “hard”

❺ arm gcc 内嵌汇编,gcc该是什么选项呢

不是很懂你的问题。我只知道如果你:
只预编译,那么就是gcc -E test.c -o test.i
只编译,那么就是 gcc -S test.i -o test.s
只汇编不链接,那么就是gcc -c test.s -o test.o //这个估计就是你要的答案,汇编用-c选项
链接,那么就是 gcc -o hello.o -o hello.o

❻ arm linux gcc怎么编译

1

gcc -g test_gdb.c -o test_gdb

只有加入选项-g才能被gdb调试。
使用quit命令,输入: quit 即可。
list:显示10源代码,再次输入该命令显示接下来的10行。
list1,10:显示从第一行到第10行的代码。
在gdb中最简单的设置方式是:break 行号 在这一行设置断点。比如break9 会在代码的第9行设置断点。当程序执行到第9行会自动暂停,此时,第9行代码还未执行。
你也可以使用:break 函数名 的方式在某个函数处设置断点,程序运行到这个函数内的第一条语句处会自动暂停。
使用命令:clear 行号 即可删除。
两种命令:next和step。两者均可以一句一句的查看语句。但不同的是,next命令将函数调用看作一条语句,而step则会进入函数,一步步的执行函数内的代码。
输入命令:continue。它可以让程序继续运行,直到程序运行完毕或者遇到下一个断点为止。
11.当程序在断点处暂停执行时,如何查看当前变量的值?
使用print命令。
这时我总结的linux gdb,希望对你有帮助

❼ arm-linux-gcc交叉编译器的制作,以及版本选择问题。

,需要必须有足够动经验来支持。
另外,用 RH9 的都是高手,我想你的知识不需要来提问了吧?

1、在 PC 上编译 arm 的程序当然需要较差编译器,这个需要自己安装,或者着现成的交叉编译器环境,一般是一个特殊参数编译出来的 gcc + binutils + glibc + linux-header。这个每个人动环境不同,一般都需要自己编译一个,当然没有特殊需求,也可以找现成的。不过很难找,因为这套环境还要和你动系统搭配,不然环境不匹配,连这个环境都不能运行,那就更谈不上编译东西了。
有关自己编译搭建交叉编译环境,可以看看一个特殊的 Linux 发行版 LFS 的分支: CLFS 。

2、移植分很多意思,移植有可能就意味着这套源代码不能在目标系统上面编译,需要你根据相应的知识去修改源代码来让这套代码适应目标编译器的要求,比如源代码有 SSE4 的优化,这套程序在非 SSE4 CPU 上无法编译运行,但目标机器连 SSE1 都不支持。那么就需要移植。
或者移植仅仅是根据新的环境进行编译,不需要进行源代码修改,只需要进行一下编译就能运行的程序,也可以称为移植,就是从一个环境、架构 -》另一个环境、架构。都可以称为移植,但真正的移植意味着修改程序源代码来适应新环境。你说的这种移植是最简单的移植。

3、决定目标硬件环境 -》搭建目标编译器 -》制作目标环境(内核,基础软件库)-》进行应用移植(移植需要的软件、主应用程序)-》搭建系统文件系统 -》导入目标系统-》启动目标系统&应用。说起来很简单,因为这是完全没有问题的条件下。
至于超级终端。那是用来控制目标系统的。目标系统有可能不能插键盘鼠标显示器,这就需要一个远程网络链接来进行控制。以及通过远程链接来发送数据。这都需要终端的支持。

虚拟机下面进行开发,不能发挥你的计算机的性能。而且因为隔着 VMware 的软件模拟层,可能还不会很方便的让你链接目标设备。

至于用 socket ,我还没见到你的目标需要这个东西,因为所有的东西都是现成的源代码。不需要你从 0 开始写,当然你想自己写一个系统内核,或者服务器程序,或者全套的系统+应用,我绝对不拦你,但希望你写完这套东西,能把源代码发布出来。
ads 可以认为是一个支持环境,他本身不是一个系统的开发 SDK 。
-------------------------------------
ads 没用过,印象里他还有模拟器,调试器什么的程序。功能上要比 Linux 开发环境,WinCE 环境下面的东西更多更偏向于硬件方面,毕竟 ads 是 arm 出品的,不太可能偏向于软件部分设计。Linux 和 WinCE 都是系统而不是硬件工具。

你可以认为交叉编译器是一个应用程序,一个输出器。把源代码输出为 arm 的代码,这个应用程序的输出,是靠他自己的环境,而不是当前系统的环境的。
当前系统的各个软件的版本,不能影响交叉编译器输出的环境(理论上,现实有的时候总是从别的地方给你打击……),交叉编译器一般至少有 gcc 、binutils 、glibc 库、linux kernel 头文件。

在软件需求上。
头文件谁都不依赖,glibc 只需要内核头文件,其他程序全都依赖于 glibc 。也就是所有程序都不依赖内核,仅仅是依赖于内核头文件。

gcc 和 binutils 是把程序源代码根据上面各个环节的需提供的功能来输出为上面环节里面的二进制程序。依赖你当前环境的,只有 gcc 和 binutils 两个程序的执行、控制环节。只有他们两个依赖的,而不是你的交叉编译后的程序。

至于编译器版本的选择,新版本功能更好,旧版本兼容更好。
这个要看你的实际需要了。应用程序源代码也调编译器的,同时也依赖于软件库的功能。

arm 开发建议稳定、兼容优先。当然也可以尝试最新的编译环境,来获取更好的优化(前提是还有什么代码优化的话)。
另外,团IDC网上有许多产品团购,便宜有口碑

❽ 深度linux的arm-linux-gnueabihf-gcc编译参数如何配

一般来说,交叉编译工具是用于在一种架构的主机(例如x86)上,编译另一种主机(例如arm)运行的程序,在这个编译期间,需要用到的头文件/库,往往需要从一个叫目标文件系统(sysroot)的路径开始查找。

sysroot里包含usr,lib,usr/lib usr/include等文件夹结构和必要的头文件和库,你理解为目标机器上的整个文件系统,搬到你这台电脑上,然后作为一个文件夹存在。

交叉编译原则上不能用主机(host)的头文件,

  • 这首先是因为编译器在查找头文件的相对路径时,交叉编译器会配置为查找目标平台架构的位置,和主机的gcc不一样,这也是为什么它去arm-linux-gnueabihf这个目录去寻找的原因。

  • 其次主机和目标机的系统版本有差异,再加上处理器架构的差异,往往有很多兼容性问题,甚至有难以解决的编译错误。

  • 如果一定要用本机的头文件系统来凑合,那么需要把所有的-I都列出来,即不仅需要-I/usr/include,还需要-I/usr/include/xxx,甚至要创建一些文件夹的符号链接指向你主机的这些头文件文件夹。即使这些,往往也未必成功,有些头文件不同的系统架构,会不完全一样甚至缺失。

交叉编译一般无法使用主机的库(so)文件

  • 主机和目标机往往架构不同,库完全不能使用

  • 可能遇到主机和目标机架构相同的情况,比如你在intel64上编译一套运行在intel64位手机的程序,但是库兼容性的问题仍然存在。

最后结论:你这个问题,如果你是为了另一套机器(比如arm开发板编译),那么需要搞一套目标机的文件系统才能顺利编译。

对了,目标文件系统需要编译了python和dev头文件/库,好多嵌入式设备裁剪的很厉害,都不用python。

❾ ARM体系的cpu编译内核时$make menuconfig 与 $make menuconfig ARCH =arm CROSS_COMPILE=arm-linux-区别

你可以看一下makefile的内容。
make menuconfig 是执行makefile里面的menuconfig目标.
如果后面ARCH =arm CROSS_COMPILE=arm-linux-的话表明: 编译出来的目标是针对ARM体系结构的。因为是针对ARM体系结构,所以需要使用交叉编译器。使用CROSS_COMPILE=xxx来指定交叉编译器。
CROSS_COMPILE=arm-linux- 意思是制定交叉编译器为arm-linux-XXX。 如:makefile里面会指定CC为arm-linux-gcc。

热点内容
优酷怎么给视频加密 发布:2025-05-14 19:31:34 浏览:633
梦三国2副本脚本 发布:2025-05-14 19:29:58 浏览:859
phpxmlhttp 发布:2025-05-14 19:29:58 浏览:432
Pua脚本 发布:2025-05-14 19:24:56 浏览:448
苹果像素低为什么比安卓好 发布:2025-05-14 19:13:23 浏览:460
安卓机微信怎么设置红包提醒 发布:2025-05-14 19:00:15 浏览:271
androidsystem权限设置 发布:2025-05-14 18:56:02 浏览:970
mq脚本 发布:2025-05-14 18:45:37 浏览:25
仙境传说ro解压失败 发布:2025-05-14 18:45:01 浏览:868
betweenand的用法sql 发布:2025-05-14 18:39:25 浏览:250