返回介绍

把选项传给连接器

发布于 2025-02-22 23:07:56 字数 9261 浏览 0 评论 0 收藏 0

例子

#include <stdio.h>

int main (void)
{
  puts ("Hello world!");
  return 0;
}

技巧

使用 -Wl,option 可以将选项 option 传递给连接器。

注意,逗号和选项之间不能有空格。一种常见用法,就是让连接器生成内存映射文件,例如:

$ gcc -Wl,-Map=output.map foo.c
$ cat output.map
Archive member included because of file (symbol)

/usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS)
                              /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o (__libc_csu_init)

Discarded input sections

 .note.GNU-stack
                0x0000000000000000        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o
 .gnu_debuglink
                0x0000000000000000        0xc /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o
 .note.GNU-stack
                0x0000000000000000        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o
 .gnu_debuglink
                0x0000000000000000        0xc /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o
 .note.GNU-stack
                0x0000000000000000        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
 .note.GNU-stack
                0x0000000000000000        0x0 /tmp/ccBOhdmq.o
 .note.GNU-stack
                0x0000000000000000        0x0 /usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS)
 .note.GNU-stack
                0x0000000000000000        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o
 .note.GNU-stack
                0x0000000000000000        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o
 .gnu_debuglink
                0x0000000000000000        0xc /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o

Memory map

 ** file header
                0x0000000000400000       0x40
 ** segment headers
                0x0000000000400040      0x1f8

.interp         0x0000000000400238       0x1c
 ** fill        0x0000000000400238       0x1c

.note.ABI-tag   0x0000000000400254       0x20
 .note.ABI-tag  0x0000000000400254       0x20 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o

.note.gnu.build-id
                0x0000000000400274       0x24
 ** note header
                0x0000000000400274       0x10
 ** zero fill   0x0000000000400284       0x14

.dynsym         0x0000000000400298       0x78
 ** dynsym      0x0000000000400298       0x78

.dynstr         0x0000000000400310       0x51
 ** string table
                0x0000000000400310       0x51

.gnu.hash       0x0000000000400368       0x1c
 ** hash        0x0000000000400368       0x1c

.gnu.version    0x0000000000400384        0xa
 ** versions    0x0000000000400384        0xa

.gnu.version_r  0x0000000000400390       0x20
 ** version refs
                0x0000000000400390       0x20

.rela.dyn       0x00000000004003b0       0x18
 ** dynamic relocs
                0x00000000004003b0       0x18

.rela.plt       0x00000000004003c8       0x30
 ** dynamic relocs
                0x00000000004003c8       0x30

.init           0x00000000004003f8       0x18
 .init          0x00000000004003f8        0x9 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o
                0x00000000004003f8                _init
 .init          0x0000000000400401        0x5 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
 .init          0x0000000000400406        0x5 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o
 .init          0x000000000040040b        0x5 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o

.plt            0x0000000000400410       0x30
 ** PLT         0x0000000000400410       0x30

.text           0x0000000000400440      0x1d8
 .text          0x0000000000400440       0x2c /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o
                0x0000000000400440                _start
 .text          0x000000000040046c       0x17 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o
 ** fill        0x0000000000400483        0xd
 .text          0x0000000000400490       0x92 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
 .text          0x0000000000400522       0x15 /tmp/ccBOhdmq.o
                0x0000000000400522                main
 ** fill        0x0000000000400537        0x9
 .text          0x0000000000400540       0x92 /usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS)
                0x0000000000400540                __libc_csu_init
                0x00000000004005d0                __libc_csu_fini
 ** fill        0x00000000004005d2        0xe
 .text          0x00000000004005e0       0x36 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o
 ** fill        0x0000000000400616        0x2
 .text          0x0000000000400618        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o

.fini           0x0000000000400618        0xe
 .fini          0x0000000000400618        0x4 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o
                0x0000000000400618                _fini
 .fini          0x000000000040061c        0x5 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
 .fini          0x0000000000400621        0x5 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o

.rodata         0x0000000000400628       0x11
 ** merge constants
                0x0000000000400628        0x4
 .rodata        0x000000000040062c        0xd /tmp/ccBOhdmq.o

.eh_frame       0x0000000000400640       0xa4
 ** eh_frame    0x0000000000400640       0xa0
 .eh_frame      0x00000000004006e0        0x4 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o

.eh_frame_hdr   0x00000000004006e4       0x2c
 ** eh_frame_hdr
                0x00000000004006e4       0x2c

.ctors          0x0000000000401e28       0x10
 .ctors         0x0000000000401e28        0x8 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
 .ctors         0x0000000000401e30        0x8 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o

.dtors          0x0000000000401e38       0x10
 .dtors         0x0000000000401e38        0x8 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
 .dtors         0x0000000000401e40        0x8 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o
                0x0000000000401e40                __DTOR_END__

.jcr            0x0000000000401e48        0x8
 .jcr           0x0000000000401e48        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
 .jcr           0x0000000000401e48        0x8 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o

.dynamic        0x0000000000401e50      0x190
 ** dynamic     0x0000000000401e50      0x190

.got            0x0000000000401fe0        0x8
 ** GOT         0x0000000000401fe0        0x8

.got.plt        0x0000000000401fe8       0x28
 ** GOT PLT     0x0000000000401fe8       0x28
 ** GOT IRELATIVE PLT
                0x0000000000402010        0x0
 ** GOT         0x0000000000402010        0x0

.data           0x0000000000402010       0x10
 .data          0x0000000000402010        0x4 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o
                0x0000000000402010                data_start
                0x0000000000402010                __data_start
 .data          0x0000000000402014        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o
 .data          0x0000000000402018        0x8 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
                0x0000000000402018                __dso_handle
 .data          0x0000000000402020        0x0 /tmp/ccBOhdmq.o
 .data          0x0000000000402020        0x0 /usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS)
 .data          0x0000000000402020        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o
 .data          0x0000000000402020        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o

.bss            0x0000000000402020       0x10
 .bss           0x0000000000402020        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o
 .bss           0x0000000000402020        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o
 .bss           0x0000000000402020       0x10 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o
 .bss           0x0000000000402030        0x0 /tmp/ccBOhdmq.o
 .bss           0x0000000000402030        0x0 /usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS)
 .bss           0x0000000000402030        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o
 .bss           0x0000000000402030        0x0 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o

.comment        0x0000000000000000       0x2b
 ** merge strings
                0x0000000000000000       0x2b

.note.gnu.gold-version
                0x0000000000000000       0x1c
 ** note header
                0x0000000000000000       0x10
 ** fill        0x0000000000000010        0x9
 ** zero fill   0x0000000000000019        0x3

.symtab         0x0000000000000000      0x390
 ** symtab      0x0000000000000000      0x390

.strtab         0x0000000000000000      0x1d5
 ** string table
                0x0000000000000000      0x1d5

.shstrtab       0x0000000000000000      0x115
 ** string table
                0x0000000000000000      0x115

详情参见 gcc 手册

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文