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++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4107

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

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

weixin_42653691的博客 229

objcopy命令介绍

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

weixin_34236497的博客 1万+

操作系统笔记【全-408统考】【附思维导图】

操作系统 思维导图 概述 操作系统的概念 管理计算机软件和硬件资源 最基本的系统软件 特征 并发 区分并发并行 共享 互斥共享方式 同时访问方式 虚拟 逻辑上多个。虚拟处理器的分时,空分复用的虚拟存储器 采用多道程序设计 异步 由于资源有限,进程走走停停 可能会导致进程产生与时间有关的错误。访问顺序 目的和功能 1.管理计算机资源 功能 处理机管理、存储器管理、文件管理、设备管理 目标:安全、有效 2.作为用户与计算机硬件系统

wvdon 2364

告别JSON!Anthropic发布Tool Calling 2.0,Agent上下文消耗骤降80%

Anthropic发布ToolCalling 2.0更新,彻底革新AI Agent开发模式。四大核心特性:1)程序化工具调用,允许模型直接输出可执行代码替代JSON交互,降低30-50%Token消耗;2)动态网页过滤,自动清洗网页内容减少24%无效信息;3)工具搜索机制,按需加载工具定义,最高优化80%上下文窗口;4)工具使用示例,通过Few-Shot示范提升复杂表单处理准确率至90%。这一升级将Agent范式从"大模型作为路由"推进到"大模型作为引擎",但需注意代

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 797

跟我学Makefile

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

W546556的博客 433

数据结构课程设计C/C++版--美团餐馆预定信息的管理与分析 5 6

第5关:注销个人信息。

m0_62222486的博客 2127

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

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

2302_80202237的博客 1045

《UDS协议从入门到精通》系列——到底什么是DTC?

到底什么是DTC?看这里,深度图解DTC格式,详述DTC状态位、快照信息和扩展信息!!

车载系统攻城狮 1万+

通信模组性能调优

本文介绍了高通平台通信模组性能调优的方法,主要包括硬件加速技术和CPU负载优化。针对CPU负载优化,提出了内核RPS/RFS功能启用、网卡队列调整、中断均衡、CPU性能模式设置等措施。同时建议关闭热管理并加强散热,调整TCP接收/发送缓存大小以解决TCP异常报文问题。这些优化手段可显著提高整机吞吐率测试中的网络性能表现。

四儿家的小祖宗的博客 1359

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

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

2301_79302469的博客 45

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

Linux GNU 编译基础知识

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

xuezhimeng2010的专栏 478

【局部规划模块曲线算法】曲线平滑介绍

本文先对轨迹平滑问题做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容(1)适合给移动机器人运动的路径【满足运动学,高阶平滑】(2)高阶的运动学不能够突变的【至少三阶的加速度不能突变,最好四阶的jerk和五阶的snap也不能突变】(3)在转弯的地方不会停下来(4)加减速均衡,节省能量(5)节省时间的。

qq_35635374的博客 5717

面向非平行语料的语音转换技术综述

摘要语音转换是语音及人工智能领域的一项研究课题,其目标是在保持源语音内容不变的情况下改变语音的音色,使其听上去像是由另一个目标说话人说出的,同时还需保证语音的质量和自然度。面向非平行语料的语音转换技术是当下的热门研究内容,其使用非平行的多说话人语音数据集进行模型训练,能完成多对多以及任意对任意的语音转换。对近年来面向非平行语料的语音转换进行了全面的总结和分析。首先概述了早期面向平行语料的语音转换及其缺陷,然后对当下面向非平行语料的语音转换的各类实现方法进行介绍和对比分析,最后对语音转换技术进行了总结和展望。

qq_61890005的博客 830

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

2403_88968905的博客 239

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

简单说明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、付费专栏及课程。

余额充值