最近写代码,想导一个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,这样编译就顺利通过了。