首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将几个依赖库链接到我的“裸机”C应用程序中

将几个依赖库链接到我的“裸机”C应用程序中
EN

Stack Overflow用户
提问于 2012-08-31 22:34:45
回答 2查看 772关注 0票数 2

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

我以前用的是Keil ARM-MDK,但现在想换成GNU-GCC了。因此,我下载了最新版本的GCC,并开始重新编译代码。

虽然已经回答了与这个问题类似的问题,但它并没有解决我的问题,因此我在这里发布我的问题。

我有一个问题: Lib_Flash有一个Read_Flash()函数。Lib_AppCfg在Lib_Flash中链接,因为它使用Read_Flash()。我的应用程序(应用程序)在Lib_Flash和Lib_AppCfg中的链接。App还使用Read_Flash()进行一些特定的闪存检查。在Keil MDK-ARM中,它工作得很好。在使用Lib_AppCfg构建函数时,我发现Read_Flash()是一个“未定义的引用”。我不确定问题出在哪里。是在链接Lib_Appcfg的时候构建的,还是在我链接应用的时候出了问题?

请给我建议。如果您需要更多信息,请让我知道。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-01 04:16:18

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

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

代码语言:javascript
复制
--start-group _Flash _AppCfg --end-group

或者其他形式

代码语言:javascript
复制
-( _Flash _AppCfg -)

有关详细信息,请参阅GNU linker manual。如果通过gcc间接驱动链接器,则可以通过-Wl option传递链接器选项,如下所示:

代码语言:javascript
复制
-Wl,-(,_Flash,_AppCfg,-)

我认为。

票数 1
EN

Stack Overflow用户

发布于 2012-08-31 22:40:29

在我看来,您的库中出现了排序问题。一些链接器将重新扫描命令行上的所有库,直到解析完所有引用(或无法解析)。其他链接器沿着链接线顺序工作。

特别是,这意味着如果库A定义了一个符号SYM_A,而库B在库A之后引用了这个符号,它将不会在第二种类型的链接器上被解析,并且您的链接将失败。

要解决此问题,您可以执行以下一项或多项操作

  1. 在链接行上对符号符号库进行重新排序,以便它们之间不存在相互依赖关系(即A引用符号,符号符号在B中定义,但B引用符号)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12217526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档