Makefile中objcopy使用说明

【ARM 嵌入式 编译系列 6 -- GCC objcopy, objdump, readelf, nm 详细使用介绍】 objcopy 是 GNU二进制工具集(binutils)的一部分,主要用于复制和转换目标文件。在ARM GCC中,通常用于从链接后的ELF格式文件中提取出二进制文件或其他格式的内容,这对于嵌入式开发特别有用,因为这样的文件可以直接烧写到微控制器的闪存中。GCCobjdump用于显示关于目标文件的信息。这些信息包括文件的头部信息、节区内容、符号表、重定位入口点等。使用objdump可以对二进制文件进行深入分析,这对于调试和理解程序的工作原理非常有用。 阅读详情

objcopy 是把一种目标文件中的内容复制到另一种类型的目标文件中。

objcopy 工具使用指南

objcopy 参数选择

复制二进制文件,可能在此过程中对其进行转换:
Usage: arm-wrs-linux-gnueabi-objcopy [option(s)] in-file [out-file]
选项如下:

-I --input-target <bfdname>      Assume input file is in format <bfdname> 假设是格式化输入<bfdname>
  -O --output-target <bfdname>     Create an output file in format <bfdname>  创建如下格式输出的文件
  -B --binary-architecture <arch>  Set output arch, when input is arch-less
  -F --target <bfdname>            Set both input and output format to <bfdname>
     --debugging                   Convert debugging information, if possible
  -p --preserve-dates              Copy modified/access timestamps to the output
  -D --enable-deterministic-archives
                                   Produce deterministic output when stripping archives
  -U --disable-deterministic-archives
                                   Disable -D behavior (default)
  -j --only-section <name>         Only copy section <name> into the output
     --add-gnu-debuglink=<file>    Add section .gnu_debuglink linking to <file>
  -R --remove-section <name>       Remove section <name> from the output
  -S --strip-all                   Remove all symbol and relocation information
  -g --strip-debug                 Remove all debugging symbols & sections
     --strip-dwo                   Remove all DWO sections
     --strip-unneeded              Remove all symbols not needed by relocations
  -N --strip-symbol <name>         Do not copy symbol <name>
     --strip-unneeded-symbol <name>
                                   Do not copy symbol <name> unless needed by
                                     relocations
     --only-keep-debug             Strip everything but the debug information
     --extract-dwo                 Copy only DWO sections
     --extract-symbol              Remove section contents but keep symbols
  -K --keep-symbol <name>          Do not strip symbol <name>
     --keep-file-symbols           Do not strip file symbol(s)
     --localize-hidden             Turn all ELF hidden symbols into locals
  -L --localize-symbol <name>      Force symbol <name> to be marked as a local
     --globalize-symbol <name>     Force symbol <name> to be marked as a global
  -G --keep-global-symbol <name>   Localize all symbols except <name>
  -W --weaken-symbol <name>        Force symbol <name> to be marked as a weak
     --weaken                      Force all global symbols to be marked as weak
  -w --wildcard                    Permit wildcard in symbol comparison
  -x --discard-all                 Remove all non-global symbols
  -X --discard-locals              Remove any compiler-generated symbols
  -i --interleave [<number>]       Only copy N out of every <number> bytes
     --interleave-width <number>   Set N for --interleave
  -b --byte <num>                  Select byte <num> in every interleaved block
     --gap-fill <val>              Fill gaps between sections with <val>
     --pad-to <addr>               Pad the last section up to address <addr>
     --set-start <addr>            Set the start address to <addr>
    {--change-start|--adjust-start} <incr>
                                   Add <incr> to the start address
    {--change-addresses|--adjust-vma} <incr>
                                   Add <incr> to LMA, VMA and start addresses
    {--change-section-address|--adjust-section-vma} <name>{=|+|-}<val>
                                   Change LMA and VMA of section <name> by <val>
     --change-section-lma <name>{=|+|-}<val>
                                   Change the LMA of section <name> by <val>
     --change-section-vma <name>{=|+|-}<val>
                                   Change the VMA of section <name> by <val>
    {--[no-]change-warnings|--[no-]adjust-warnings}
                                   Warn if a named section does not exist
     --set-section-flags <name>=<flags>
                                   Set section <name>'s properties to <flags>
     --add-section <name>=<file>   Add section <name> found in <file> to output
     --dump-section <name>=<file>  Dump the contents of section <name> into <file>
     --rename-section <old>=<new>[,<flags>] Rename section <old> to <new>
     --long-section-names {enable|disable|keep}
                                   Handle long section names in Coff objects.
     --change-leading-char         Force output format's leading character style
     --remove-leading-char         Remove leading character from global symbols
     --reverse-bytes=<num>         Reverse <num> bytes at a time, in output sections with content
     --redefine-sym <old>=<new>    Redefine symbol name <old> to <new>
     --redefine-syms <file>        --redefine-sym for all symbol pairs 
                                     listed in <file>
     --srec-len <number>           Restrict the length of generated Srecords
     --srec-forceS3                Restrict the type of generated Srecords to S3
     --strip-symbols <file>        -N for all symbols listed in <file>
     --strip-unneeded-symbols <file>
                                   --strip-unneeded-symbol for all symbols listed
                                     in <file>
     --keep-symbols <file>         -K for all symbols listed in <file>
     --localize-symbols <file>     -L for all symbols listed in <file>
     --globalize-symbols <file>    --globalize-symbol for all in <file>
     --keep-global-symbols <file>  -G for all symbols listed in <file>
     --weaken-symbols <file>       -W for all symbols listed in <file>
     --alt-machine-code <index>    Use the target's <index>'th alternative machine
     --writable-text               Mark the output text as writable
     --readonly-text               Make the output text write protected
     --pure                        Mark the output file as demand paged
     --impure                      Mark the output file as impure
     --prefix-symbols <prefix>     Add <prefix> to start of every symbol name
     --prefix-sections <prefix>    Add <prefix> to start of every section name
     --prefix-alloc-sections <prefix>
                                   Add <prefix> to start of every allocatable
                                     section name
     --file-alignment <num>        Set PE file alignment to <num>
     --heap <reserve>[,<commit>]   Set PE reserve/commit heap to <reserve>/
                                   <commit>
     --image-base <address>        Set PE image base to <address>
     --section-alignment <num>     Set PE section alignment to <num>
     --stack <reserve>[,<commit>]  Set PE reserve/commit stack to <reserve>/
                                   <commit>
     --subsystem <name>[:<version>]
                                   Set PE subsystem to <name> [& <version>]
     --compress-debug-sections     Compress DWARF debug sections using zlib
     --decompress-debug-sections   Decompress DWARF debug sections using zlib
  -v --verbose                     List all object files modified
  @<file>                          Read options from <file>
  -V --version                     Display this program's version number
  -h --help                        Display this output
     --info                        List object formats & architectures supported

GNU实用工具程序objcopy的作用是拷贝一个目标文件的内容到另一个目标文件中。
Objcopy使用GNU BFD库去读或写目标文件。
Objcopy可以使用不同于源目标文件的格式来写目的目标文件(也即是说可以将一种格式的目标文件转换成另一种格式的目标文件。
通过以上命令行选项可以控制Objcopy的具体操作。

Objcopy在进行目标文件的转换时,将生成一个临时文件,转换完成后就将这个临时文件删掉。Objcopy使用BFD做转换工作。
如果没有明确地格式要求,则Objcopy将访问所有在BFD库中已经描述了的并且它可以识别的格式,请参见《GNUpro Decelopment Tools》中“using ld”一章中“BFD库”部分和“BFD库中规范的目标文件格式”部分。

通过使用srec作为输出目标(使用命令行选项-o srec),Objcopy可以产生S记录格式文件。
通过使用binary作为输出目标(使用命令行选项-o binary),Objcopy可以产生原始的二进制文件。
使用Objcopy产生一个原始的二进制文件,实质上是进行了一回输入目标文件内容的内存转储。
所有的符号和重定位信息都将被丢弃。内存转储起始于输入目标文件中那些将要拷贝到输出目标文件去的部分的最小虚地址处。

使用Objcopy生成S记录格式文件或者原始的二进制文件的过程中,-S选项和-R选项可能会比较有用。-S选项是用来删掉包含调试信息的部分,-R选项是用来删掉包含了二进制文件不需要的内容的那些部分。

一些参数说明

  • input-file

  • outfile
    参数input-file和outfile分别表示输入目标文件(源目标文件)和输出目标 文件(目的目标文件)。如果在命令行中没有明确地指定outfile,那么Objcopy将创建一个临时文件来存放目标结果,然后使用input- file的名字来重命名这个临时文件(这时候,原来的input-file将被覆盖)。

  • -I bfdname

  • –input-target=bfdname
    明确告诉Objcopy,源文件的格式是什么,bfdname是BFD库中描述的标准格式名。这样做要比“让Objcopy自己去分析源文件的格式,然后去和BFD中描述的各种格式比较,通过而得知源文件的目标格式名”的方法要高效得多。
    -O bfdname
    –output-target= bfdname
    使用指定的格式来写输出文件(即目标文件),bfdname是BFD库中描述的标准格式名。

  • -F bfdname

  • –target= bfdname
    明确告诉Objcopy,源文件的格式是什么,同时也使用这个格式来写输出文件(即目标文件),也就是说将源目标文件中的内容拷贝到目的目标文件的过程中,只进行拷贝不做格式转换,源目标文件是什么格式,目的目标文件就是什么格式。

  • -R sectionname

  • –remove-section= sectionname
    从输出文件中删掉所有名为sectionname的段。这个选项可以多次使用。
    注意:不恰当地使用这个选项可能会导致输出文件不可用。

  • -S

  • –strip-all (strip 剥去、剥)
    不从源文件中拷贝重定位信息和符号信息到输出文件(目的文件)中去。

  • -g
    –strip-debug
    不从源文件中拷贝调试符号到输出文件(目的文件)中去。

  • –strip-undeeded
    剥去所有在重定位处理时所不需要的符号。

  • -K symbolname

  • –keep-symbol= symbolname
    仅从源文件中拷贝名为symbolname的符号。这个选项可以多次使用。

  • -N symbolname

  • –strip-symbol= symbolname
    不从源文件中拷贝名为symbolname的符号。这个选项可以多次使用。它可以和其他的strip选项联合起来使用(除了-K symbolname | --keep-symbol= symbolname外)。

  • -L symbolname

  • –localize-symbol= symbolname
    使名为symbolname的符号在文件内局部化,以便该符号在该文件外部是不可见的。这个选项可以多次使用。

  • -W symbolname

  • -weaken-symbol= symbolname
    弱化名为symbolname的符号。这个选项可以多次使用。

  • -x

  • –discard-all (discard 丢弃、抛弃)
    不从源文件中拷贝非全局符号。

  • -X

  • –discard-locals
    不从源文件中拷贝又编译器生成的局部符号(这些符号通常是L或 . 开头的)。

  • -b byte

  • –byte= byte
    只保留输入文件的每个字节(头数据不受影响)。Byte的取值范围从0到interleave-1,其中interleave由-i或–interleave选项给出,或者默认值为4。这个选项对于创建文件到程序ROM很有用。它通常与srec输出目标一起使用。

  • -i interleave

  • –interleave= interleave (interleave 隔行、交叉)
    只从每个交错字节中复制一个。使用-b或——byte选项选择要复制的字节。默认值是4。如果你没有指定-b或–byte, Objcopy会忽略这个选项。

  • -p

  • –preserve-dates (preserve 保存、保持)
    设置输出文件的访问和修改日期和输入文件相同。

  • –debugging
    如果可能的话,转换调试信息。因为只有特定的调试格式被支持,以及这个转换过程要耗费一定的时间,所以这个选项不是默认的。

  • –gap-fill= val
    使用内容val填充段与段之间的空隙。通过增加段的大小,在地址较低的一段附加空间中填充内容val来完成这一选项的功能。

  • –pad-to= address
    填充输出文件到虚拟地址address。通过增加输出文件中最后一个段的大小,在输出文件中最后一 段的末尾和address之间的这段附加空间中,用–gap-fill= val选项中指定的内容val来填充(默认内容是0,即没有使用–gap-fill= val选项的情况下)。

  • –set-start= val
    设置新文件(应该是输出文件吧?)的起始地址为val。不是所有的目标文件格式都支持设置起始地址。

  • –change-start = incr

  • –adjust-start= incr
    通过增加值incr来改变起始地址。不是所有的目标文件格式都支持设置起始地址。

  • –change-addresses incr

  • –adjust-vma incr
    更改所有区段的VMA和LMA地址。,以及起始地址,通过添加incr。一些目标文件格式不允许任意更改节地址。
    通过加上一个值incr,改变所有段的VMA(Virtual Memory Address运行时地址)和LMA(Load Memory Address装载地址),以及起始地址。某些目标文件格式不允许随便更改段的地址。

  • –change-section-address section{=,+,-} val

  • –adjust-section-vma section{=,+,-} val
    设置或者改变名为section的段的VMA(Virtual Memory Address运行时地址)和LMA(Load Memory Address装载地址)。如果这个选项中使用的是“=”,那么名为section的段的VMA(Virtual Memory Address运行时地址)和LMA(Load Memory Address装载地址)将被设置成val;如果这个选项中使用的是“-”或者“+”,那么上述两个地址将被设置或者改变成这两个地址的当前值减去或加上 val后的值。如果在输入文件中名为section的段不存在,那么Objcopy将发出一个警告,除非–no-change-warnings选项被使用。
    这里的段地址设置和改变都是输出文件中的段相对于输入文件中的段而言的。
    例如:
    (1)–change-section-address .text = 10000
    这里是指将输入文件(即源文件)中名为.text的段拷贝到输出文件中后,输出文件中的.text段的VMA(Virtual Memory Address运行时地址)和LMA(Load Memory Address装载地址)将都被设置成10000。
    (2)–change-section-address .text + 100
    这 里是指将输入文件(即源文件)中名为.text的段拷贝到输出文件中后,输出文件中的.text段的VMA(Virtual Memory Address运行时地址)和LMA(Load Memory Address装载地址)将都被设置成以前输入文件中.text段的地址(当前地址)加上100后的值。

  • –change-section-lma section{=,+,-} val
    仅设置或者改变名为section的段的 LMA(Load Memory Address装载地址)。
    一个段的LMA是程序被加载时,该段将被加载到的一段内存空间的首地址。
    通常LMA和VMA(Virtual Memory Address运行时地址)是相同的,但是在某些系统中,特别是在那些程序放在ROM的系统中,LMA和VMA是不相同的。
    如果这个选项中使用的是 “=”,那么名为section的段的LMA(Load Memory Address装载地址)将被设置成val;如果这个选项中使用的是“-”或者“+”,那么LMA将被设置或者改变成这两个地址的当前值减去或加上val 后的值。
    如果在输入文件中名为section的段不存在,那么Objcopy将发出一个警告,除非–no-change-warnings选项被使用。

  • –change-section-vma section{=,+,-} val
    仅设置或者改变名为section的段的 VMA(Load Memory Address装载地址)。
    一个段的VMA是程序运行时,该段的定位地址。
    通常VMA和LMA(Virtual Memory Address运行时地址)是相同的,但是在某些系统中,特别是在那些程序放在ROM的系统中,LMA和VMA是不相同的。
    如果这个选项中使用的是 “=”,那么名为section的段的LMA(Load Memory Address装载地址)将被设置成val。
    如果这个选项中使用的是“-”或者“+”,那么LMA将被设置或者改变成这两个地址的当前值减去或加上val 后的值。如果在输入文件中名为section的段不存在,那么Objcopy将发出一个警告,除非–no-change-warnings选项被使用。

  • –change-warnings

  • –adjust-warnings
    如果命令行中使用了–change- section-address section{=,+,-} val或者–adjust-section-vma section{=,+,-} val,又或者–change-section-lma section{=,+,-} val,又或者–change-section-vma section{=,+,-} val,并且输入文件中名为section的段不存在,则Objcopy发出警告。这是默认的选项。

  • –no-chagne-warnings

  • –no-adjust-warnings
    如果命令行中使用了–change- section-address section{=,+,-} val或者–adjust-section-vma section{=,+,-} val,又或者–change-section-lma section{=,+,-} val,又或者–change-section-vma section{=,+,-} val,即使输入文件中名为section的段不存在, Objcopy也不会发出警告。

  • –set-section-flags section=flags
    为为section的段设置一个标识。这个flags变量的可以取逗号分隔的多个标识名字符串(这些标识名字符串是能够被Objcopy程序所识别的),合法的标识名有alloc,load,readonly,code,data和rom。
    你可以为一个没有内容的部分设置内容标志,但是清除一个有内容的部分的内容标志是没有意义的;只需要删除这一部分即可。并非所有标志对所有目标文件格式都有意义。

  • –add-section sectionname=filename
    进行目标文件拷贝的过程中,在输出文件中增加一个名为 sectionname的新段。这个新增加的段的内容从文件filename得到。这个新增加的段的大小就是这个文件filename的大小。只要输出文 件的格式允许该文件的段可以有任意的段名(段名不是标准的,固定的),这个选项才能使用。

  • –change-leading-char
    一些目标文件格式在符号的开头使用特殊字符。最常见的字符是下划线,编译器通常会在每个符号之前添加它。这个选项告诉objcopy在对象文件格式之间转换时改变每个符号的首字符。如果目标文件格式使用相同的前导字符,则此选项不起作用。否则,它将酌情添加一个字符,或删除一个字符,或更改一个字符。

  • –remove-leading-char
    如果全局符号的第一个字符是object文件格式使用的特殊符号前导字符,则删除该字符。最常见的符号开头字符是下划线。此选项将从所有全局符号中删除前导下划线。如果您希望将具有不同符号名称约定的不同文件格式的对象链接在一起,这将非常有用。

  • –weaken
    将文件中的所有全局符号更改为弱符号。这在构建一个对象时非常有用,该对象将使用链接器的-R选项与其他对象进行链接。
    此选项仅在使用支持弱符号的对象文件格式时有效。

  • -V

  • –version
    显示objcopy的版本号。

  • -v

  • –verbose
    详细输出:列出所有修改的对象文件。在归档的情况下,objcopy -V列出归档的所有成员。

  • –help
    显示objcopy的选项摘要。

使用示例

例如:程序打印出自身代码

// test.c
#include <stdio.h>
#include <stdlib.h>
extern char * _binary_test_c_start;
int main()
{
	printf("%s", (char *)&_binary_test_c_start);
	return 0;
}

makefile写法

SRC = test.c
TAR = t.exe
PE = pe-i386
ELF = elf32-i386
ALL:test.c
	objcopy -I binary -O $(ELF) -B i386 test.c test.bin
	gcc -o t.exe test.c test.bin

(1) 将图像编译到可执行文件内

Q: 如何将一个二进制文件,比如图片,词典一类的东西做为.o文件,直接链接到可执行文件内部呢?
A:
$ objcopy -I binary -O elf32-i386 -B i386 14_95_13.jpg image.o
$ gcc image.o tt.o -o tt
$ nm tt | grep 14_95
0805d6c7 D _binary_14_95_13_jpg_end
00014213 A _binary_14_95_13_jpg_size
080494b4 D _binary_14_95_13_jpg_start

(2)使用objcopy把不用的信息去掉:

$ objcopy -R .comment -R .note halo halo.min

(3)使用objcopy重新生成一些信息

$ objcopy -R .note -R .comment -S -O binary xyb xyb.bin
-R .note -R .comment 表示移掉 .note 与 .comment 段
-S 表示移出所有的标志及重定位信息
-O binary xyb xyb.bin 表示由xyb生成二进制文件xyb.bin

Linux下实现飞控开发:使用CMake构建STM32工程 前言 由于工作原因,已经许久没有接触飞控了。18年的时候曾经写过一个半成品开源飞控,是基于Keil MDK这款商业IDE开发的,只能在Windows下运行。由于笔者现在绝大部分时间都在使用Linux,偶尔想回顾一下以前的代码,却不是特别地方便,因此萌生了将原先的飞控项目移植到Linux下的想法。 目前国内单片机开发的教程绝大部分都是基于Keil的,Keil MDK作为一款商业IDE,的确有它的优势... 阅读详情

相关推荐

nm readelf objdump objcopy 命令之间的关系

objdump, readelf, nm, 和 objcopy 是 GNU Binutils 套件的一部分,它们用于处理二进制文件。objdump: 这是一个能够提供各种信息的程序,包括反汇编输出、源代码交叉引用等。更具体地说,它能够读取并解析二进制文件,然后以人类可读的形式显示这些信息。例如,它可以显示出二进制文件的所有头信息,包括文件的大小、段的数量和类型等。此外,它还能显示二进制文件的每个段的内容,包括段内的机器码和对应的汇编代码。readelf: 这个程序用于显示 ELF 格式文件的详细信息。

暗推中... 1493

GNU objcopy命令的探索:(转换二进制文件)

linux objcopy命令的高级技巧:使用它来创建和操作文件的特殊元素

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4108

MSP430 GCC工具链安装配置与项目构建全攻略

在嵌入式系统开发中,编译器工具链是连接源代码与硬件执行的关键桥梁。GCC作为开源、跨平台的编译器集合,其工作原理是通过预处理、编译、汇编、链接等阶段将高级语言转化为机器码。对于资源受限的微控制器(MCU)开发,选择高效的工具链能显著优化代码体积与性能,提升开发灵活性。MSP430系列作为低功耗MCU的代表,其GCC工具链支持为开发者提供了除厂商专用编译器外的开源选择。本文聚焦于MSP430 GCC工具链的安装配置与项目构建,详细解析了在Code Composer Studio集成环境与独立命令行两种方式下的

weixin_42653691的博客 229

objcopy命令介绍

为什么80%的码农都做不了架构师?>>> ...

weixin_34236497的博客 1万+

手把手教你用ArduPilot搭建低成本无人车(附APM飞控+有刷电调配置清单)

本文提供了一份基于ArduPilot开源平台搭建低成本智能无人车的详细实战指南。核心内容包括APM架构飞控的选型、双向有刷电调的兼容性配置与校准、系统连接逻辑,以及通过Mission Planner地面站进行参数调校和自主导航功能设置的完整流程,帮助爱好者快速实现从手动控制到自主行驶的跨越。

java5的博客 851

NVIDIA Jetson Orin系列 - 使用SDK Manager安装JetPack全流程解析

本文详细解析了使用NVIDIA官方SDK Manager为Jetson Orin系列开发板安装JetPack系统的完整流程。从环境准备、设备进入恢复模式,到SDK Manager图形化界面的分步操作指南,提供了新手友好的全流程解析,并分享了安装后的验证方法及常见问题解决方案,帮助开发者高效搭建稳定的边缘AI开发环境。

nn3456的博客 407

跟我学Makefile

/在头文件中的定义#endif//在main函数中的使用//在编译过程中会出现问题,因为在 G 和 (x)中间多了一个空格,导致编译器将 G 看成一个宏,而不是 G(x).// 宏定义和typedef 一致// T1和T2所表示的类型有可能会不一致//比如T1 a , b;a是指针类型,b是结构体类型T2 a , b;a和b都是指针类型。

W546556的博客 433

国产信创服务器软硬件兼容情况1 --- ARM架构

信创,即信息技术应用创新产业,它是数据安全、网络安全的基础,也是新基建的重要组成部分...

一只猿的自我修养 4741

硬件(八)GUN工具链、Makefile 使用、SDK工具、内存段

bss 段:用于存放未初始化或初始化为 0 的数据,在运行时会被自动清零。例如(静态变量,全局或局部)、(显式初始化为 0 的全局变量)。COMMON 段:存放未初始化的非静态全局变量,链接时才确定最终大小和位置,允许多个目标文件定义同名符号。比如(未初始化的非静态全局变量)。.data 段:存放已初始化的全局变量和静态变量(非零值),需要在程序文件中保存实际的初始值。像(初始化为非零值)、(初始化为非零数组)。.rodata 段(只读数据段):存放程序的只读数据,运行时受保护不可修改。

2302_80202237的博客 1045

114.Android简单的动态切换app的图标,两种方式

- 默认的图标-->-- 需要切换的图标-->android:label="短信"-- 默认activity-->

曹二少的博客 5574

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。

weixin_40132006的博客 2241

linux内核makefile编译过程学习(2)

all 是默认目标,如果使用命令make或者make all编译 Linux 的话此目标就会被匹配。KBUILD_EXTMOD 为空的,因此194 行的代码成立, 因此_all依赖all。all又依赖vmlinux,开始编译vmlinux。

2301_79302469的博客 45

MATLAB实战:5步搞定GNSS单点定位解算(附完整代码)

本文提供了一份基于MATLAB的GNSS单点定位实战指南。通过5个核心步骤,详细讲解了如何从卫星坐标和伪距观测值出发,利用最小二乘迭代算法,构建并实现一个完整的单点定位解算器。文章附有完整代码,并涵盖精度评估与结果分析,适合GNSS初学者和MATLAB用户快速上手实践。

a2b3c4d5e的博客 250

Linux GNU 编译基础知识

A. arm-linux-gcc 这里只简单介绍该命令的使用方法,详细资料可详读参考资料中的《嵌入式LINUX应用开发完全手册》第3章。      -c  对源文件进行预处理、编译、汇编,但不做链接,生成中间OBJ文件,通常以.o结尾。      -g    添加调试信息      -o  指定输出文件。如果不指定-o filename 选项,默认输出为a.out文件。 B.  ar

xuezhimeng2010的专栏 478

landsat8数据下载教程

下载landsat数据教程

weixin_44001203的博客 1万+

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

ARM学习笔记整理(四)-移植U-Boot(二)

正常编译uboot的过程是,在make XXXX_config配置你的成你的板子之后,直接去make,就可以去编译出最后你需要的u-boot.bin了。此处,就是分析,在make之后,最后boot是如何生成的,去分析这个过程。 $(obj)u-boot: depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT) UNDEF_SYM=`$(OBJ...

xiebingsuccess的博客 626

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Makefile进阶篇之LD

Makefile进阶篇 概述 上一张Makefile之初级篇 描述了如何编写一个简单的Makefile。如上一篇所说,生成可执行文件包含了两个过程: 编译 + 连接。 如果没有特别指定需要使用的ld文件,连接阶段就会使用gcc 的默认ld文件; 如果需要使用特别的ld 文件,可以使用如下命令: arm-linux-ld -Tlink.lds sample1.o sample2.o main.o...

small_a_black的博客 7869

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现

1. ARM 交叉工具链各工具作用基于你使用的。

2403_88968905的博客 239

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

简单说明Makefile使用方法

1、创建Makefile vi Makefile all: arm-linux-gcc -c led_on.s -o led_on.o arm-linux-ld -Ttext 0 led_on.o -o led_on.elf arm-linux-objcopy -O binary -S led_on.elf led_on.bin arm-linux-objdump -D led_on.elf > led_on.dis clean: rm *.o *.elf *.bin *.dis 注意

qq_41716400的博客 776

Makefile常见用法说明

延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句。延时变量 ​​​​​​​ 值使用到时才确定。: 如果这个变量在前面已经被定义了,这句话就会不会起效果,即时变量 值即刻确定,在定义时即确定。附加, 它是即时变量还是延时变量取决于前面的定义。通过指定内核路径来编译ko文件,Makefile domo程序。

qq_41882586的博客 709

arm-linux-gcc/ld/objcopy/objdump使用总结

arm-linux工具的功能如下: arm-linux-addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。   arm-linux-ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。 arm-linux-c

zqs 1519

通用makefile

文章目录1 最基本的makefile1.1 简单粗暴的makefile1.2 稍微提高效率的makefile1.3 更加精炼的makefile1.4 需要手工添加头文件规则的makefile1.5 支持自动检测头文件的makefile1.6 支持自动获取目标文件的makefile 1 最基本的makefile 有main.c、sub.c、sub.h三个文件,文件内容如下: main.c: #inc...

木子皿--啥都不会的菜鸟 1340

1.最简单的操作系统(二)makefile

一、目的: 1.把源代码(boot.S)经过编译链接等过程,变成一个可执行文件(boot.bin) 2.生成一个镜像文件(boot.img),用于系统启动。系统启动可以从软件上启动,也可以从硬盘上启动,这里选择的是软件 3.把可执行文件(boot.bin)放到镜像文件(boot.img)中正确的位置,确保系统启动后能运行这个可执行文件二、单句分析all:boot.img每个makefile都必

幸福在路上 2413

Makefile编写中参数说明

CROSS_COMPILE = arm-linux- CC = $(CROSS_COMPILE)gcc LD = $(CROSS_COMPILE)ld OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump CC_FLAG = -Wall -nostdlib -fno-builtin TAR

菜鸟笔记 1681

Linux之运行于用户空间的应用程序的代码的Makefile文件书写【递归编译,带子目录的工程:有顶层Makefile、Makefile.build和子目录中的Makefile】

根据前文叙述,CROSS_COMPILE的值为CPP的情况我们等会儿再说,我们先看下能展开的五个命令各自的作用。我把CROSS_COMPILE的值代入请分别说下这些命令各自的作用。下面是你提到的工具的功能介绍,基于我把CROSS_COMPILE的值代入请分别说下这些命令各自的作用。根据你提供的命令,下面是对STRIPOBJCOPY和OBJDUMP这条命令的作用是将ASLDCCCPPAR和NM。

昊虹AI笔记 1400
上一篇: Linux 命令速查
下一篇: Python线程和线程池
Limit_Fly
博客等级 码龄9年 31粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值