【问题标题】:Compile single static library for Cortex M3, M4, M23 and M33为 Cortex M3、M4、M23 和 M33 编译单个静态库
【发布时间】:2021-04-08 16:49:30
【问题描述】:

我目前正在研究一个相当通用的通信堆栈。它在一端获取字节,解析数据包并调用回调。 我想把这个堆栈放在一个静态库中(即libcommstack.a)。

该库面向嵌入式 ARM Cortex-M 设备。目前我们已经指定至少应该使用 Cortex-M3(但它也应该适用于 M4 或 M33)。

现在我正在将它集成到另一个应用程序中以验证是否可以链接它。未来的想法是,我们会将这个.a 文件发送给客户,以便他们可以围绕它构建他们的应用程序,而无需直接访问我们的源代码(以封装我们的 IP)。

我们使用 GCC ARM v7.2.1 来编译库和链接到它的应用程序。 我试图与之集成的应用程序是为带有-mfloat-abi=hard -mfpu-fpv6-sp-d16 的 Cortex M33 编译的。

该库的代码使用任何浮点,并使用-march=archv7-m 编译(两者都有-mthumb 标志)。

链接似乎一切顺利,直到我真正从库中调用了一个函数。此时链接器开始抱怨:

application.elf uses VFP register arguments, libcommstack.a(somefile.c.obj) does not
failed to merge target specific data of file libcommstack.a(somefile.c.obj)

由于我没有在库中使用浮点数,而且我不知道(预先)目标应用程序是否有 FPU(甚至使用浮点数),我不知道如何处理这个. 我想有两种方法:

  1. 使用所有微控制器都能理解的指令集编译单个版本的库。我希望 ARMv7 也是如此(尽管我还没有 100% 确信 M23/M33 也支持这一点)。
  2. 根据不同的架构、FPU 等为不同的风格编译大量不同的库。

正如您可以想象的那样,我更愿意保持简单并选择选项 1,但我不确定如何“说服”链接器链接这两者(或者也许如何说服编译器不关心lib 的浮点数)。

有谁知道选项 1 是否可行以及如何实现?

如果不可行,要记住哪些变量来确定不同的构建风格?

【问题讨论】:

    标签: gcc linker cortex-m cortex-m3


    【解决方案1】:

    有谁知道选项1是否可行

    嗯,可行,可能。

    如何实现?

    获取您想要支持的所有处理器并确定所有这些处理器上可用的指令集。然后针对该指令集进行编译。

    但是,请不要,这是一种解决方法。

    如果不可行,要记住哪些变量来确定不同的构建风格?

    Gcc 有类似“multilib 配置文件”的东西。请参阅arm-none-eabi-gcc --print-multi-lib 输出。如果您安装了 newlib,您可以转到 /usr/arm-none-eabi/lib/thumb/ 并查看那里的目录 - newlib 为每个配置文件编译并为其安装单独的库,并根据配置选择不同的库。为每个配置文件编译,并通过将库放入正确的/usr/arm-none-eabi/lib/proper/directory/here 来打包您的库,编译器将自行选择它们(请参阅库搜索路径的gcc -v 输出)。例如,搜索它发生的 newlib 源,找不到它。 (Here's my example)。以 cmake 作为后端为例,你可以编译安装如下:

    arm-none-eabi-gcc --print-multi-lib |
    while IFS=';' read -r dir opts; do
         cmake -B builddir CMAKE_C_FLAGS="$opts" CMAKE_INSTALL_LIBDIR="$dir"
         cmake --build builddir
         cmake --install builddir --prefix "/usr/arm-none-eabi/"
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2016-08-17
      • 2011-06-10
      • 2012-07-16
      • 2015-03-06
      • 2018-09-23
      • 2013-05-22
      相关资源
      最近更新 更多