3237|10

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个奇怪的问题? [复制链接]

这个问题和
#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif
有关。
在PB中已有的project中添加了几个文件原来是.c的文件,我把他们改成了cpp文件添加了进去,build,编译没有错误,可是连接有几个error LNK2019: unresolved external symbol错误,就是有几个函数没有找到,其实这几个函数就在一个叫hook.cpp的文件中,而我把hook.h文件加上
#ifdef __cplusplus
extern "C" {
#endif
。。。。函数
#ifdef __cplusplus
}
#endif
再build就ok了。

#ifdef __cplusplus
extern "C" {
#endif
的作用是将里面的包含的变量和函数在编译时使用c的命名规则
问题是我的文件是cpp文件,而不是.c文件,同时其他的.cpp文件则不需要使用
#ifdef __cplusplus
extern "C" {
#endif

请指点一下

最新回复

我只知道.c是C源文件 .cpp是C++源文件 嘿嘿  详情 回复 发表于 2009-5-12 09:36
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你是把它们都编译成lib或dll吧~
外部要引用的都是这个文件里面的吧~
其他的cpp都是内部引用的吧~
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
学习~~~
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
对,是把它们都编译成lib或dll吧~
这个文件hook.cpp中的函数是另外一个文件要引用,不是dll或lib导出的函数
其他的cpp都是内部引用的,其实和hook.cpp中一样,也是内部应用的
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
学习
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

6
 
主要原因就是C++的函数生成后的命名方式与C的不一样的原因.
#ifdef __cplusplus
extern "C" {
#endif
会使用CPP按照C的方式进行编译,否则就按照C++的方式编译,
会导致生成的函数符号与C的不一致,在C里调用就是提示unresolved external symbol
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
哦 我理解错了~
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 
现在的问题是:我的文件都是.cpp文件,而不是.c文件,而其他文件也存在类似的调用情况,就没有unresolved external symbol???
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
现在的情况是,cpp调用另一cpp中的函数,不是cpp调用.c中函数,不过这个hook.cpp的内容是按照c的方式写的!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
怎么没有人。。。。。给点意见
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

11
 
我只知道.c是C源文件 .cpp是C++源文件
嘿嘿
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表