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

  • 相关阅读:
    docker创建nginx+php-fpm+mysql环境(一分钟搭建lnmp)
    dcoker搭建wordpress
    docker搭建mysql
    nginx负载均衡精简配置实例
    docker配置阿里云镜像加速
    Centos7 ssh配置RSA证书登录
    Dockerfile centos7_php5.6.36
    Dockerfile cnetos7_nginx1.15.10
    Dockerfile centos7_tomcat7.0.64_jdk7u80
    centos7 安装docker
  • 原文地址:https://www.cnblogs.com/linucos/p/2349835.html
Copyright © 2011-2022 走看看