ST意法半导体
直播中

刘丽菲

8年用户 986经验值
私信 关注
[问答]

可以在没有任何未定义引用的情况下成功创建静态库并编译和链接到它吗?

由于目前的供应问题,我一直在研究同一系列的 3 个不同的微控制器,STM32F4xx。我试图在他们自己的项目中包含硬件特定代码,每个处理器 3 个。但是我有用于所有 3 个的通用代码。
现在为了解决这个问题,我创建了一个自定义的 STM32 项目,该项目设置为静态库。这将包含所有通用代码。这可以很好地构建并输出一个 .a 文件,并且主项目可以链接到库。但是问题出现在链接阶段,并给了我对库中函数的未定义引用。
在主项目设置 -> C/C++ 构建 -> 设置和工具设置选项卡中,在 MCU GCC 链接器 -> 库中,我已链接库以允许找到并链接到 .a 文件。
我想知道是否还有其他人能够在没有任何未定义引用的情况下成功创建静态库并编译和链接到它?





回帖(1)

高敏兰

2022-12-20 10:05:07
我有很多这样的错误:


  • c:ststm32cubeide_1.7.0stm32cubeidepluginscom.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346toolsarm-none-eabibinld.exe: C:/Playground/AppA/Debug/../Core/Src/main.c:567: undefined reference to `HAL_GPIO_Init'

我的链接器命令是这样的:


  • -mcpu=cortex-m4 -T"C:PlaygroundAppASTM32L431KCUX_FLASH.ld" --specs=nosys.specs -Wl,-Map="${BuildArtifactFileBaseName}.map" -Wl,--gc-sections -static -L"C:PlaygroundLibADebug" -Wl,--start-group -lLibA -lc -lm -Wl,--end-group --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb

问题是我的 AppA 会给 LibA 未定义的引用,它有 STM32CubeIDE 生成的 Drivers 文件夹。这样我就可以拥有多个使用不同处理器的应用程序并将它们链接到同一个 LibA。
我确实找到了这个问题的解决方案,当 LibA 由 STM32CubeIDE 生成时,由于某种原因,它不会与 Drivers/STM32L4xx_HAL_Driver 中的 Src 文件夹一起生成,这就是为什么它给出了未定义的引用,因为没有这些文件的 .o 文件Src 文件,所以库没有将它们包含在 .a 输出中。这些文件具有应用程序试图使用的功能。这不是最好的方法,但我将 Src 文件夹从另一个项目复制到正确的位置,一旦有 .o 文件可供使用,它就可以正常链接。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分