• 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接口头文件重名源文件重名,经常会带来莫名其妙的问题,需要加以注意!

  • 相关阅读:
    关于<?php exit;?>"的绕过问题
    机器学习--DIY笔记与感悟--②决策树(1)
    机器学习--DIY笔记与感悟--①K-临近算法(2)
    js 一些基础的理解
    js switch判断 三目运算 while 及 属性操作
    数据类型 数据类型转换 运算符
    数组的一些常用方法分析 介绍
    js常用的字符串方法分析
    js 的作用域 域解析 分析
    js 函数 作用域 全局作用域 局部作用域 闭包
  • 原文地址:https://www.cnblogs.com/linucos/p/2349835.html
Copyright © 2020-2023  润新知