链接器脚本条件包括

时间:2015-01-19 17:01:26

标签: c++ c linker arm ld

我正在将分散文件转换为链接器文件。现在问题是armlink可以在链接时接受符号,例如--predefine=-DSOME_VARIABLE,在散点文件中,其他头文件可以包含在#include "someHeader.h指令中。在定义的符号的基础上存在包含在分散文件中的文件,例如

#ifdef INCLUDE_RANDOM_FILE 
    randomFile (*) 
#endif

在链接描述文件中,这些选项不可用。是否有解决这个问题的方法。

1 个答案:

答案 0 :(得分:1)

有两个相当简单的选项。

  1. 使用编译器预处理器并使用输出。
  2. 颠倒你的逻辑。

  3. 在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符号以及不需要条件的存根文件和例程来摆脱这些条件通常会非常容易。