我正在将分散文件转换为链接器文件。现在问题是armlink可以在链接时接受符号,例如--predefine=-DSOME_VARIABLE
,在散点文件中,其他头文件可以包含在#include "someHeader.h
指令中。在定义的符号的基础上存在包含在分散文件中的文件,例如
#ifdef INCLUDE_RANDOM_FILE
randomFile (*)
#endif
在链接描述文件中,这些选项不可用。是否有解决这个问题的方法。
答案 0 :(得分:1)
有两个相当简单的选项。
在GCC或任何编译器中使用C预处理器。
$(CC) $(DEFINES) -E -P -o output.lds -x c-header input.lds
此选项允许全范围的预处理器定义和条件包含。
invert 选项是为您需要的每个案例提供单独的主'lds'文件,然后包含公共部分。
<强> flash.lds 强>
start = 0xf000000;
size = 0x100000;
include "common.lds"
<强> ram.lds 强>
start = 0x0;
size = 0x10000;
include "common.lds"
同样可以是生产和调试变体。如果排列很低,这相当容易。否则,我会使用预处理。
bin-utils ld documentation在 linkcmds.memory 文件中也有一个很好的例子。您必须符号链接或复制Makefile
或构建过程中的 linkcmds.memory 文件。
通过使用weak
符号以及不需要条件的存根文件和例程来摆脱这些条件通常会非常容易。