如何将 link 静态库放入特定的部分?
How to link static library into specific section?
我正在为嵌入式平台编写代码。我需要 link 使用第 3 方 SDK。但是,该 SDK 中的符号应进入特定部分(而不是 .text
)。可以吗?
我为 xtensa-lx106 处理器使用基于 GNU 的工具链,并为 ESP8266 芯片构建。
为此,您必须修改您正在使用的 linker 脚本。
您可能会在 link 最终二进制文件所在行的 makefile 中找到它。 linker 脚本是通过 -T
选项传递的文件。
一旦你有了这个,在文本编辑器中打开它并搜索 SECTION
指令。您可能会在其中找到一个名为 .text
的组,其中列出了应进入最终文本段的所有部分。
您可以只将 SDK 的代码段名称添加到此列表中。如果 SDK 有多个具有共同前缀的部分(这种情况经常发生),您甚至可以使用通配符。
如果需要,可以使用 .data
组和 .bss
组来完成同样的事情。
进行这些修改后,您可以重新link您的可执行文件,SDK 库中的部分应直接进入 .text
和 .data
组。
如果需要,您还可以在 linker 文件顶部的 MEMORY
声明中创建新组。这使您可以直接控制 linker 将使用的确切地址。然后,您可以将 SDK 库部分直接重定向到您创建的新内存区域,并且这些库始终位于同一地址。
我正在为嵌入式平台编写代码。我需要 link 使用第 3 方 SDK。但是,该 SDK 中的符号应进入特定部分(而不是 .text
)。可以吗?
我为 xtensa-lx106 处理器使用基于 GNU 的工具链,并为 ESP8266 芯片构建。
为此,您必须修改您正在使用的 linker 脚本。
您可能会在 link 最终二进制文件所在行的 makefile 中找到它。 linker 脚本是通过 -T
选项传递的文件。
一旦你有了这个,在文本编辑器中打开它并搜索 SECTION
指令。您可能会在其中找到一个名为 .text
的组,其中列出了应进入最终文本段的所有部分。
您可以只将 SDK 的代码段名称添加到此列表中。如果 SDK 有多个具有共同前缀的部分(这种情况经常发生),您甚至可以使用通配符。
如果需要,可以使用 .data
组和 .bss
组来完成同样的事情。
进行这些修改后,您可以重新link您的可执行文件,SDK 库中的部分应直接进入 .text
和 .data
组。
如果需要,您还可以在 linker 文件顶部的 MEMORY
声明中创建新组。这使您可以直接控制 linker 将使用的确切地址。然后,您可以将 SDK 库部分直接重定向到您创建的新内存区域,并且这些库始终位于同一地址。