为什么明明头文件中有此符号定义,编译时却显示找不到?

2019-12-25 18:48发布

嗯,那个, 我用keil5.1,arm gcc编译器 mirco-lib进行了勾选

然后编译的时候显示a.c文件编译后的a.o文件里引用的符号,姑且叫FOO吧,不存在。这
个东西其实是个结构体的。

然后我就下意识的去.c文件找了。

结果奇葩的是,这个对应的.c文件里根本没有用到这个符号FOO……呃,,

然后我在搜索工具里面搜索整个工程,发现FOO在多处被引用,其中一处在
a.c的包含的头文件bc.h里面。

然后我就打开bc.h,发现里面对FOO的原型进行了定义,形式如下:

  1. typedef   struct      
  2.     {   
  3.         ...
  4.     } FOO_t
复制代码
然后后面有一处是

  1.         FOO_t FOO;
复制代码

其它还有好几处引用……但是都看不出什么问题、、、

就是这样……照道理来说,应当没有任何问题的,但是只要一
编译,就显示a.o里面引用的符号FOO找不到。

这个……我觉得好无语……大家能不能想到可能的原因?我总结罗列下一个个去试,排除法,,

最后弱弱问下,我好久没来,大家想我了没有呼呼^_^
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
wei669
1楼-- · 2019-12-27 09:15
习学发开来了,等着楼下的解释!
chenchaoting
2楼-- · 2019-12-27 13:24
 精彩回答 2  元偷偷看……
yunhuisong
3楼-- · 2019-12-27 18:36
本帖最后由 yunhuisong 于 2017-8-19 21:58 编辑

再bc.h中直接定义了一个变量FOO_t FOO?这样不妥吧

不是最好只在头文件中声明(extern FOO_t FOO;),在其它.c中定义变量
zhoufly
4楼-- · 2019-12-27 22:57
原来习学发开还在,好久没见发帖了。
楼下帮忙解决问题。
习学发开
5楼-- · 2019-12-28 04:55
Excellence 发表于 2017-8-19 20:01
把后面定义放了c文件试试

对,我也觉得在头文件里有问题……

比如说bc.c如果被多次包含的话,会造成重复定义……

谢谢建议
习学发开
6楼-- · 2019-12-28 07:32
yunhuisong 发表于 2017-8-19 21:55
再bc.h中直接定义了一个变量FOO_t FOO?这样不妥吧

不是最好只在头文件中声明(extern FOO_t FOO;),在其它 ...

我懂你的意思,这样的好处是定义一次,接下来

额,所有的包含了.h的文件都能使用该变量

但是奇葩的是我试过这个了,问题依旧……

怎么回事呢

一周热门 更多>