C&C++多系统集成需要注意的问题

C&C++系统,经常遇到要多系统继承的情况,比如把一个第三方库引入到一个现有系统中,或者集成几个现有库,有些时候,我们发现编译和链接会发生一些莫名奇妙的问题,下面把遇到的问题给于总结:

1. 编译错误

(1)头文件没找到

这种情况解决起来比较简单,先确定系统里到底没有引用到的头文件,有的话再确定编译器是否能找到头文件所在的路径。

(2)类型、变量或者函数未声明

有两种情况:

A. 有多个同名头文件,结果编译器首先找到的并不是实际需要的

解决办法就是:把需要的头文件路径放在前边

B. 引用到了正确的头文件,而且明明就是声明了或者定义了,还是说没找到

问题很可能就是出在了条件编译上,某些编译环境定义的宏挡住了真正的定义,可用#error "Msg" 测试到底编译器处理没处理定义部分,打开宏即可

2. 链接错误

编译错误一般就是符号没找到,有两大类情况:

(1). 确实没有定义符号

这个需要添加了,没什么其他办法

(2). 确实定义了符号,链接还是说找不到,有三种情况:

A. 条件编译挡住了函数定义

可以看下编译器是否编译到了需要的接口

B. nm类似的命令可看是否有符号定义,这种情况下最有可能的原因是.o文件重名了,可看下符号具体所在的源文件名,修改至不重名即可.

C. C++调用C函数时候,会默认认为是需要命名转换的,比如Revert接口,C++会调用_zxyRevert_sjX3类似的接口,但是相应的C源码被编译后,生成的符号是_Revert,这时候

需要把C++中引用到的C接口,用extern "C"声明下即可,这也是extern "C"的作用了.

综上,需要注意的是,C++引用C接口头文件重名源文件重名,经常会带来莫名其妙的问题,需要加以注意!

原文地址:https://www.cnblogs.com/linucos/p/2349835.html