如何用armgcc生成符号表

如何用armgcc生成符号表,gcc,arm,embedded,Gcc,Arm,Embedded,我想创建一个符号定义表,以便在链接期间在单独的应用程序中使用。ARM的armlink链接器具有以下标志,但我使用的是ARM eabi: -Wl,-Map-Wl,mapfile-Wl,--cref 添加到最后一个gcc(link)命令行应该可以做到这一点。GNU有一个选项--extract symbol,可以执行您想要的操作。它生成一个只包含符号数据的对象文件,没有实际的代码或数据 它专门用于生成用于VxWorks RTOS的.sym文件,该RTOS具有使用此信息的命令shell和动态链接器/加

我想创建一个符号定义表,以便在链接期间在单独的应用程序中使用。ARM的armlink链接器具有以下标志,但我使用的是ARM eabi:


-Wl,-Map-Wl,mapfile-Wl,--cref

添加到最后一个gcc(link)命令行应该可以做到这一点。

GNU有一个选项
--extract symbol
,可以执行您想要的操作。它生成一个只包含符号数据的对象文件,没有实际的代码或数据

它专门用于生成用于VxWorks RTOS的.sym文件,该RTOS具有使用此信息的命令shell和动态链接器/加载程序。VxWorks主机外壳和源代码级调试器也使用它


另一方面,生成的输出非常类似于armlink的
--symdefs
,您可以轻松地将其后置处理为所需的格式。

这是来自arm gnu launchpad的正确答案:


您打算使用GNU工具链还是armcc one加载symdef文件?如果是前者,我认为在对象文件上使用nm,然后使用
-R
链接就可以了。因此,在链接prog之后,您可以执行
arm none-eabi nm-D./prog>/prog.defsym
,然后
arm none-eabi-gcc-Wl,-R,./prog.defsym
当您想要使用它时。

我要求链接器接受该格式。我尝试了readelf--syms file.elf>sym.def。但这并不仅仅被链接器接受:symbol=地址;恐怕没有binutils工具可以生成与您想要的格式完全相同的列表(直接接受为链接器命令文件)。你可能需要重新格式化。如果
objdump-t
更适合您的需要,您可以尝试。如果您想引用另一个对象文件中定义的符号,但不想将其包含在链接中,请使用
--just symbols=
将其添加到链接器命令行。如果您需要的话,这些符号将被解析为绝对地址。