如何列出链接器分配的代码对象w/gcc?

如何列出链接器分配的代码对象w/gcc?,c,memory-management,gcc,ld,objdump,C,Memory Management,Gcc,Ld,Objdump,我正在构建一个由几个代码模块和一个静态库组成的嵌入式应用程序。一些全局变量显式地放置在专用内存部分(即,不是默认的.data部分) 处理器内存结构是4个存储组,创建一个连续的物理内存空间。在我的应用程序中,只有第一个库保留用于代码,其他三个库保留用于显式分配的全局变量和一个小堆栈 问题是代码段(.text)现在已超出第一个银行边界,我收到以下链接器错误消息: ./bin/ld: section .data_bank1 loaded at [0000000000002000,00000000000

我正在构建一个由几个代码模块和一个静态库组成的嵌入式应用程序。一些全局变量显式地放置在专用内存部分(即,不是默认的.data部分)

处理器内存结构是4个存储组,创建一个连续的物理内存空间。在我的应用程序中,只有第一个库保留用于代码,其他三个库保留用于显式分配的全局变量和一个小堆栈

问题是代码段(.text)现在已超出第一个银行边界,我收到以下链接器错误消息:

./bin/ld: section .data_bank1 loaded at [0000000000002000,0000000000003fff] overlaps section .text loaded at [0000000000000630,00000000000020df]
./bin/ld: section .fini loaded at [00000000000020e0,00000000000020f9] overlaps section .data_bank1 loaded at [0000000000002000,0000000000003fff]
在链接器检查节和对象重叠并中止生成之前,是否有办法查看对象分配(可能在临时对象文件中)?

您可以将
--print map
标志传递给链接器。这将使它发出每个对象文件的每个部分映射到内存中的详细信息

例如:

 .text          0x0000000000400370       0x2c /<snip>/lib64/crt1.o
                0x0000000000400370                _start
 .text          0x000000000040039c       0x17 /<snip>/lib64/crti.o
 *fill*         0x00000000004003b3        0xd 90909090
 .text          0x00000000004003c0       0x92 /<snip>/4.6.3/crtbegin.o
 *fill*         0x0000000000400452        0x2 90909090
 .text          0x0000000000400454       0x21 /tmp/ccwAfGkH.o
                0x000000000040045f                x
                0x000000000040046a                y
                0x0000000000400454                main
.text 0x0000000000403700x2c//lib64/crt1.o
0x0000000000400370_开始
.text 0x00000000004039C 0x17//lib64/crti.o
*填充*0x00000000004003b3 0xd 9090
.text 0x00000000004003c0 0x92//4.6.3/crtbegin.o
*填充*0x000000000040452 0x2 9090
.text 0x0000000000404540x21/tmp/ccwAfGkH.o
0x00000000004045F x
0x00000000004046A y
0x000000000040454主

您是否尝试将--print map传递到链接器?也就是说,即使它无法链接,它是否仍然能够生成链接地图?@jleahy-刚刚尝试过。虽然输出是压倒性的,但当你仔细观察时,它确实给出了信息。如果你回答这个问题,我会再重复一遍。