我正在 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/