c - 将几个依赖库链接到我的 "bare metal"C 应用程序中

标签 c gcc embedded arm static-libraries

我正在 ST ARM-Cortex-M3 上开发裸机 C 应用程序。我还开发了可在所有这些应用程序中使用的库。

我曾经使用 Keil ARM-MDK,但想转向 GNU-GCC。于是我下载了最新版本的GCC并开始重新编译代码。

虽然与此类似的问题已经得到解答,但它并没有解决我的问题,因此我发布我的问题。

我遇到以下问题: Lib_Flash有一个函数Read_Flash()。 Lib_AppCfg 链接到 Lib_Flash,因为它使用 Read_Flash()。 我的应用程序 (App) 链接在 Lib_Flash 和 Lib_AppCfg 中。应用程序还使用 Read_Flash() 进行一些特定的 FLASH 检查。 在 Keil MDK-ARM 中运行良好。 使用 GCC,当构建使用 Lib_AppCfg 的函数时,我收到错误,指出 Read_Flash() 是“ undefined reference ”。 我不确定问题出在哪里。是在构建 Lib_Appcfg 的链接中还是在链接应用程序时出现问题?

请指教。如果您需要更多信息,请告诉我。

最佳答案

默认情况下,GNU 链接器按照命令行上列出的顺序搜索库一次。因此,如果列表中后面的库引用了前面的库或目标文件中定义的符号,则无法解析它。

简单的解决方案是使用库分组;这会导致链接器重复搜索库列表,直到无法解析更多的语法。如果您单独调用链接器 (ld),则链接器选项为:

--start-group _Flash _AppCfg --end-group

或替代形式

-( _Flash _AppCfg -)

请参阅GNU linker manual了解详情。如果通过 gcc 间接驱动链接器,则可以通过 -Wl option 传递链接器选项。 ,类似:

-Wl,-(,_Flash,_AppCfg,-)

我认为。

关于c - 将几个依赖库链接到我的 "bare metal"C 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217526/

相关文章:

c++ - 如何将 gcc 链接器固定地址添加到链接器文件中?

c - 局部变量的运行时内存分配在嵌入式系统中如何工作?

c - Libm 没有三角函数

c++ - 如何使用 DSP 加速 OMAP 上的代码?

c - 从 STDIN 读取,鸡计划

c++ - 从 gcc 函数树节点检索函数参数

c++ - 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?

c - 使用星号时传递给 C 程序的参数发生变化

.net - 命令行 Windows 编译器 (cl.exe) 目标

c - 从补丁文件中去除C注释的方法