LD:如何将.a文件与.o文件添加到指定sections

3 篇文章 0 订阅
2 篇文章 0 订阅

 核心代码与注释如下:

MEMORY
{
    ...
    ARM_SECT0 (rx) : ORIGIN = 0x60aa8000, LENGTH = 0x58000 
    ARM_SECT1 (rx) : ORIGIN = 0x20800000, LENGTH = 0x180000 /* 1.5M */
    ...
}

ENTRY(Reset_Handler)

SECTIONS
{
    ...
    .text :
	{
		. = ALIGN(4);
		_stext = .;
        
        /* 将main.c和clock.c文件编译出来的text指定到ARM_SECT0 */
		*main.o(.text*)
		*clock.o(.text*)

        /* 将libgcc.a的text指定到ARM_SECT0 */
		*\libgcc.a:*

		_etext = .;
	} > ARM_SECT0

	.text_xip : 
	{
		. = ALIGN(4);
		_stext = .;
        
        /* 将main.c和clock.c文件编译出来的text从ARM_SECT1移除 */
		*(EXCLUDE_FILE(*main.o
					   *clock.o) 
		  .text*)

		/* .ctors */
		*crtbegin.o(.ctors)
		*crtbegin?.o(.ctors)
		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
		*(SORT(.ctors.*))
		*(.ctors)

		/* .dtors */
 		*crtbegin.o(.dtors)
 		*crtbegin?.o(.dtors)
 		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
 		*(SORT(.dtors.*))
 		*(.dtors)

		. = ALIGN(4);
	} > ARM_SECT1
    ...
}

编译结果如下:

.text           0x0000000060aa8000     0x63ca
                0x0000000060aa8000                . = ALIGN (0x4)
                0x0000000060aae3cc                _stext = .
 *main.o(.text*)
 .text.normal_sys_init
                0x0000000060aa8000        0xe /home/build/main.o
                0x0000000060aa8000                normal_sys_init
 *fill*         0x0000000060aa800e        0x2 
 .text.print_system_status
                0x0000000060aa8010       0x90 /home/build/main.o
                0x0000000060aa8010                print_system_status
 .text.main     0x0000000060aa80a0      0x1cc /home/build/main.o
                0x0000000060aa80a0                main
 *clock.o(.text*)
 .text.lcd_i80clk_set
                0x0000000060aa826c       0x14 /home/build/clock.o
 .text.osc_clk_set
                0x0000000060aa8280       0x14 /home/build/clock.o
 .text.get_current_clk_soucre
                0x0000000060aa8294       0x20 /home/build/clock.o
......
 *\libgcc.a:*()
  .text          0x0000000060aad14c      0x378 /opt/gcc-arm/gcc-arm-none-eabi-10.3-2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v8-m.main+fp/hard/libgcc.a(_arm_addsubdf3.o)
                 0x0000000060aad14c                __aeabi_drsub
                 0x0000000060aad154                __aeabi_dsub
                 0x0000000060aad154                __subdf3
                 0x0000000060aad158                __adddf3
                 0x0000000060aad158                __aeabi_dadd
                 0x0000000060aad3d0                __aeabi_ui2d
                 0x0000000060aad3d0                __floatunsidf
                 0x0000000060aad3f0                __floatsidf
                 0x0000000060aad3f0                __aeabi_i2d
                 0x0000000060aad414                __extendsfdf2
                 0x0000000060aad414                __aeabi_f2d
                 0x0000000060aad458                __aeabi_ul2d
                 0x0000000060aad458                __floatundidf
                 0x0000000060aad468                __floatdidf
                 0x0000000060aad468                __aeabi_l2d
  .debug_frame   0x0000000060aad4c4       0xac /opt/gcc-arm/gcc-arm-none-eabi-10.3-2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v8-m.main+fp/hard/libgcc.a(_arm_addsubdf3.o)
......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cc -o ../../bin/lsqfit main.o lsqfit_ls.o block_init.o line.o -L../../lib -ldblock -ldutil /home/ubuntu/software/tcl/tcl8.5.11/lib/libtcl8.5.so -lm -lc /usr/bin/ld: main.o: in function `main': main.c:(.text+0x239): undefined reference to `blk_open_file' /usr/bin/ld: main.c:(.text+0x499): undefined reference to `blk_open_file' /usr/bin/ld: main.c:(.text+0x5e3): undefined reference to `blk_open_file' /usr/bin/ld: main.c:(.text+0x8f9): undefined reference to `blk_open_file' /usr/bin/ld: ../../lib/libdblock.a(skip.o): in function `blk__skip': skip.c:(.text+0xed): undefined reference to `blk__getlines' /usr/bin/ld: skip.c:(.text+0x126): undefined reference to `blk__getlines' /usr/bin/ld: ../../lib/libdblock.a(read.o): in function `blk_init_read': read.c:(.text+0x15): undefined reference to `blk__getenv' /usr/bin/ld: ../../lib/libdblock.a(read.o): in function `blk_read_blk': read.c:(.text+0x6a): undefined reference to `blk__getenv' /usr/bin/ld: ../../lib/libdblock.a(read.o): in function `blk_read_data': read.c:(.text+0xad): undefined reference to `blk__getenv' /usr/bin/ld: ../../lib/libdblock.a(read.o): in function `blk__read_data': read.c:(.text+0x119): undefined reference to `blk__getlines' /usr/bin/ld: read.c:(.text+0x1b2): undefined reference to `blk__getlines' /usr/bin/ld: read.c:(.text+0x1e5): undefined reference to `blk__getlines' /usr/bin/ld: ../../lib/libdblock.a(read.o): in function `blk_read_check': read.c:(.text+0x398): undefined reference to `blk__getenv' /usr/bin/ld: ../../lib/libdblock.a(read.o): in function `blk_read_blk_check': read.c:(.text+0x3d6): undefined reference to `blk__getenv' /usr/bin/ld: ../../lib/libdblock.a(read.o): in function `blk__read_check': read.c:(.text+0x49b): undefined reference to `blk__getlines' /usr/bin/ld: read.c:(.text+0x788): undefined reference to `blk__getlines' /usr/bin/ld: ../../lib/libdblock.a(read.o): in function `blk_print_env': read.c:(.text+0xbdf): undefined reference to `blk__getenv' /usr/bin/ld: ../../lib/libdblock.a(variables.o
06-06

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值