embedded - 如何将静态库链接到特定部分?

标签 embedded static-libraries ld esp8266

我正在为嵌入式平台编写代码。我需要链接到第 3 方 SDK。但是,该 SDK 中的符号应进入特定部分(而不是 .text)。有可能吗?

我为 xtensa-lx106 处理器使用基于 GNU 的工具链,并为 ESP8266 芯片构建。

最佳答案

为此,您必须修改正在使用的链接描述文件。

您可能会在链接最终二进制文件的行中的 makefile 中找到它。链接器脚本是通过 -T 选项传递的文件。

完成后,在文本编辑器中打开它并搜索 SECTION 指令。您可能会在其中找到一个名为 .text 的组,其中列出了应进入最终文本段的所有部分。

您可以只将 SDK 的代码段名称添加到此列表中。如果 SDK 有多个带有共同前缀的部分(这种情况经常发生),您甚至可以使用通配符。

如果需要,可以使用 .data 组和 .bss 组来完成同样的事情。

在这些修改之后,您可以重新链接您的可执行文件,SDK 库中的部分应该直接进入 .text.data 组。

如果需要,您还可以在链接器文件顶部的 MEMORY 声明中创建新组。这使您可以直接控制链接器将使用的确切地址。然后,您可以将 SDK 库部分直接重定向到您创建的新内存区域,并且这些库始终位于同一地址。

关于embedded - 如何将静态库链接到特定部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31292193/

相关文章:

c++ - 在使用模板的c++中核心类型不同的不同项目中使用通用代码

c - HAL_LED_MODE_ON

c - LD_PRELOAD 在我的代码中是如何工作的

c++ - Armadillo 的静态链接

c++ - 通过两次链接同一个库来解决循环依赖?

linux - 创建静态库时嵌入所有外部引用

c - 如何在c中为微 Controller 定义新端口

c - strncmp 在解析器函数中失败

c++ - CMake链接另一个项目中的单个类

c++ - 如何在单个文件 C++ 代码中使用库?