我想做的一切,从图像中取出一些符号并使用(链接)来自不同图像的符号。
使用armccc / armlink时,指定--symdefs =时,会创建包含符号和地址的文件。
另一方面,如果删除未使用的符号,则只更新现有符号。
如果将此文件包含在编译中,则会将上一个图像的符号与新图像链接起来。
但我找不到类似的GNU工具方法(arm-none-eabi-)。 如果我使用arm-none-eabi-nm,它会创建符号列表,如armcc --symdefs选项,但无法找到一种方法来使用此符号列表与第二个图像compliation。 (也没有办法在没有grep的情况下过滤符号。)
其他选项似乎也使用arm-none-eabi-objcopy,但无法找到如何使用它与第二次图像补充。
在GNU工具链中,我们该怎么做?任何的想法?
另一方面,如果可能的话,我想将其应用于Keil uVision IDE。 感谢。
答案 0 :(得分:1)
对armcc不太了解,使用标准GNU工具模拟这种行为可能相当容易。例如。生成symdef文件:
$ cat tmp.c
int foo() { return 0; }
int bar() { return 1; }
int main() { return 0; }
$ gcc tmp.c
$ readelf -sW a.out | grep GLOBAL | awk '{print $8 " " $2 }' | grep -v '^_' > symdef.lst
然后使用它通过--defsym
标志为链接器定义缺少的符号:
$ LDFLAGS=$(cat symdef.lst | awk '{print "-Wl,--defsym=" $1 "=" $2}' | tr '\n' ' ')
$ echo $LDFLAGS
-Wl,--defsym=bar=0000000000400481 -Wl,--defsym=foo=0000000000400476 -Wl,--defsym=main=000000000040048