解决multiple definition of的方法

原创 2016年05月31日 22:30:54
问题原因:
    当多个文件包含同一个头文件时,并且你的.H里面没有加上条件编译
#ifndef TEST_H
#define TEST_H
#endif
就会独立的解释,然后生成每个文件生成独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复定义的错误。

1:
    给每一个头文件加上条件编译,避免该文件被多次引用时被多次解释,这是个应该是习惯。这个方法会解决大部分低级问题。

2:
    当方法1无效时,可以把所有的全局变量放入一个头文件 global.h (名字随意起,但要加条件编译)中,每一个变量前面加extern,声明一下这些变量将在其它文件中定义。 然后建立一个和头文件名字对应的.c or .cpp文件 如global.c。在里面声明所有的全局变量。例如:void(*Handl_Display)();
然后,让涉及到全局变量的文件include ”global.h“。这样编译时,会先对global.c编译生成一个global.o ,然后再和其它文件的.o链接生成可执行文件。

3:
    在所有的全局变量前加上static ,声明成静止变量。也能解决问题。
版权声明:欢迎大家提出意见,指出错误,互相交流。

重复定义(multiple definition of)与重复包含

test-1.0使用#ifndef只是防止了头文件被重复包含(其实本例中只有一个头件,不会存在重复包含的问题),但是无法防止变量被重复定义。vi test.cincludeinclude “test....
  • ChinaWallace
  • ChinaWallace
  • 2016年04月26日 09:29
  • 1741

gtk中使用glade

gtk+:是一套源码以LGPL许可协议分发、跨平台的图形工具包 glade:是gtk+图形用户界面产生器(Graphical User Interface Builder for GTK+) 有关gt...
  • u013293310
  • u013293310
  • 2013年12月30日 16:17
  • 1632

docker中import "C"的用法,Go与C语言的互操作

在读docker判断存储的driver时,有这样一块代码:func dmSetDevDirFct(dir string) int { Cdir := C.CString(dir) defer fr...
  • grace_yi
  • grace_yi
  • 2016年06月03日 22:17
  • 983

gsoap使用总结

项目中新加网管平台,所有应用都需要向网管平台(web应用)定时主动上报监控的数据统计。各相关应用与网管平台部署在不同服务器,网络互通。 各应用包含java,c++的实现。其中c++访问web ser...
  • krens
  • krens
  • 2017年10月24日 18:50
  • 104

multiple definition of(变量或者函数)

今天在公司写项目的时候,遇到如下错误,半个小时了,没看出来问题出在哪里~我看了好几遍代码,确认没有重定义,后来问旁边的大牛,才发现自己手误,错吧#include “area.h”写成#include"...
  • Agoni_xiao
  • Agoni_xiao
  • 2018年01月02日 16:21
  • 105

交叉编译libACE

1. 下载 访问ACE的官网http://download.dre.vanderbilt.edu/ 下载ACE.tar.gz2 ,链接http://download.dre.vanderbilt.e...
  • Sakaue
  • Sakaue
  • 2014年02月25日 17:03
  • 2504

caffe 的layer层组织结构

caffe的layer层是靠INSTANTIATE_CLASS和REGISTER_LAYER_CLASS来进行对各个层类进行处理的。每一个layer都是继承基类Layer的,其中BaseDataLay...
  • xueyunf
  • xueyunf
  • 2015年07月03日 11:01
  • 2240

盈鹏飞嵌入式---OpenWRT在iMX6UL上面的移植与编译

选择 OpenWRT在最近的时期分裂出了LEDE出来,因此这就涉及到了这两个的选择。 前段时间,编译过LEDE用于树莓派3,于是想着直接使用以前的LEDE,这样子省去了下载,毕竟在国内下载...
  • szhebin
  • szhebin
  • 2017年04月17日 13:54
  • 1920

用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)

在安装好的opencv目录下找到路径:opencv245\opencv\3rdparty\ffmpeg,此路径下有一个readme.txt文件。 根据此文件中的步骤采用minGW对ffmpeg进行编译...
  • wsbeibei
  • wsbeibei
  • 2014年05月13日 17:17
  • 2142

【caffe源码研究】第三章:源码篇(9) :DataLayer

先从最基础的Data层讲起。 看看datalayer相关的类的继承关系首先定义了一个template class Batch { public: Blob data_, label_; };...
  • fangjin_kl
  • fangjin_kl
  • 2017年01月06日 00:30
  • 349
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决multiple definition of的方法
举报原因:
原因补充:

(最多只允许输入30个字)