免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4840 | 回复: 12
打印 上一主题 下一主题

.h文件不识别,求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-17 13:52 |只看该作者 |倒序浏览
我想我的工程中添加别人编写的用于读取配置文件用的.h文件,那几个文件放在一个叫read的目录里,然后把read放在myproject/src/include/下,然后我在我的cpp文件中引用这个头文件中的函数。

我在makefile中添加了红色的部分:
CPPFLAGS_slogread = \
        -I. \
        -I../include/read \
        -I/opt/oracle/product/10.2.0/Db_1/rdbms/public


但是make的时候就出现下面的错误,好像是不识别:
Undefined                       first referenced
symbol                             in file
ld: fatal: Symbol referencing errors. No output written to 。。。。。

各位大哥谁知道是怎么回事呢?谢谢亚:)

论坛徽章:
0
2 [报告]
发表于 2007-07-17 13:54 |只看该作者
都ld阶段了,和头文件有关系么?

[ 本帖最后由 ivhb 于 2007-7-17 13:55 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-07-17 13:58 |只看该作者
我只是觉得这几个头文件好像没被编译,因为我把头文件里的东西随便改错一点,makefile的时候也不会出错,所以我感觉是这几个头文件没有被识别。

我刚开始接触C++,很多都不太明白,可以说的清楚一些吗:)

论坛徽章:
0
4 [报告]
发表于 2007-07-17 14:05 |只看该作者
makefile没有报错,可能是因为你没有make clean
因为我想,你添加头文件,就有undefined symbol,
这个不好说的,不知道你头文件的组织是什么。
你能不能贴出你ld出错的具体信息?
到ld了,肯定不是编译阶段,而是链接阶段了。
一定是你引用了某个函数,某个变量,但是没有定义。

论坛徽章:
0
5 [报告]
发表于 2007-07-17 14:11 |只看该作者
因为我考虑是这样的,你的头文件中
不管是定义了变量还是定义了函数(当然不是一个好习惯),对于程序来说,
只是增了变量/函数实体,不管你程序是否引用,不会出现undefined symbol才是。
如果你是申明的话,多申明几个没有定义过的变量,只要不引用他,ld会自动忽略吧。
也不会导致你说的“加了头文件”就出现了undefined symbol。因此,最好是找你身边有经验的人,给你看一下,
应该不是很么棘手的事情。

论坛徽章:
0
6 [报告]
发表于 2007-07-17 14:15 |只看该作者
谢谢指导我:)

每次makefile之前我都clean了,可是结果还是一样

代码比较多,我说出错的地方吧:)
.h文件是用来读取配置文件的
里面有一个类叫Property
我在我的cpp文件中:
先#include "../include/read/property.h"

然后在main函数中
只是引用一个对象 Property prop;

makefile就出错了
出的错误是:
"programmain.cpp", line 28: Error: Property is not defined.
1 Error(s) detected.
*** Error code 1
make: Fatal error: Command failed for target `release/progranmain.o'

然后我改了一下main函数中的引用
改成是read : : Property prop;

makefile
出的错误是:
。。。。。。。
。。。。。。。。
Undefined                       first referenced
symbol                             in file
read:: Property : : Property(const std: : string &) release/programmain.o
ld: fatal: Symbol referencing errors. No output written to release/processor
*** Error code 1
make: Fatal error: Command failed for target `processor'

上面的省略号都是成功的信息,所以就没写

[ 本帖最后由 wanyouyinli 于 2007-7-17 14:16 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-07-17 14:34 |只看该作者
会不会是我makefile中没有把这个h文件编译成.o文件?

论坛徽章:
0
8 [报告]
发表于 2007-07-17 14:53 |只看该作者
谢谢,主要是我周围的人和我一样以前都是做JAVA WEB的,都没有经验亚:)

我想把这个h文件生成o文件,我怀疑可能这个原因,但是在makefail里面这么写出错,哪位高手帮我看看呢

OBJS_programmain=  \
         。。。。
        $(TARGETDIR_programmain)/property.o \
         。。。。。。

$(TARGETDIR_programmain)/property.o: $(TARGETDIR_programmain ../include/read/property.h
$(COMPILE.cc) $(CCFLAGS_programmain) $(CPPFLAGS_programmain) -o $@ ../include/read/property.h

clean:
        rm -f \
     。。。。。。。
    $(TARGETDIR_programmain)/property.o

[ 本帖最后由 wanyouyinli 于 2007-7-17 15:33 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2007-07-17 14:57 |只看该作者
原帖由 wanyouyinli 于 2007-7-17 14:15 发表

代码比较多,我说出错的地方吧:)
.h文件是用来读取配置文件的
里面有一个类叫Property
我在我的cpp文件中:
先#include "../include/read/property.h"

这种包含方式很不妥当。
然后在main函数中
只是引用一个对象 Property prop;

makefile就出错了
出的错误是:
"programmain.cpp", line 28: Error: Property is not defined.
1 Error(s) detected.
*** Error code 1
make: Fatal error: Command failed for target `release/progranmain.o'

然后我改了一下main函数中的引用
改成是read : : Property prop;

makefile
出的错误是:
。。。。。。。
。。。。。。。。
Undefined                       first referenced
symbol                             in file
read:: Property : : Property(const std: : string &) release/programmain.o
ld: fatal: Symbol referencing errors. No output written to release/processor
*** Error code 1
make: Fatal error: Command failed for target `processor'

这个纯粹就是链接错误,它不是因为你没用包含对应头文件,而是因为你没用链接对应的目标文件或库文件。

论坛徽章:
0
10 [报告]
发表于 2007-07-17 15:33 |只看该作者
谢谢LS,那就是说我的h文件没有编译成o文件吧?:)

我尝试着在makefile中添加下面这些,但是出错,不知道哪里不对


OBJS_programmain=  \
         。。。。
        $(TARGETDIR_programmain)/property.o \
         。。。。。。

$(TARGETDIR_programmain)/property.o: $(TARGETDIR_programmain ../include/read/property.h
$(COMPILE.cc) $(CCFLAGS_programmain) $(CPPFLAGS_programmain) -o $@ ../include/read/property.h

clean:
        rm -f \
     。。。。。。。
    $(TARGETDIR_programmain)/property.o
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP