https://www.cnblogs.com/Xiao_bird/archive/2010/05/26/1744638.html
解决方法:
1.引用文件和实现文件中都不使用const,针对定义变量后再初始化
2.引用文件和实现文件中都使用extern const,针对定义变量时初始化
最近写代码,想导一个const全局变量 ,于是在头文件中:
extern const unsigned int MyVar;
在实现文件中:
const unsigned int MyVar = 10;
可是在链接时,其它文件中对MyVar的引用都报了找不到符号的错误,检查了半天,发现去掉MyVar的const修饰就可以。百思不得其解,只能请google来帮忙,于是才发现:原来C++中被const修饰的全局变量默认只在文件内可见!我说用readelf -s找不到目标文件中的MyVar变量呢!
解决办法:在实现文件中修改如下:
extern const unsigned int MyVar = 10;
即指定导出MyVar,这样编译就顺利通过了。
原来如此,extern在C++中用法和在C中有区别,后面仔细查查