首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

动态库中全局变量调用的有关问题

2012-02-14 
动态库中全局变量调用的问题最近我写了一个动态库,其中包含一个.cpp文件和几个.c文件,这些文件中我都用到

动态库中全局变量调用的问题
最近我写了一个动态库,其中包含一个.cpp文件和几个.c文件,这些文件中我都用到了一个全局定义的指针结构,并且我在.cpp文件中写了一个初始化该指针结构的函数initpara(),在主程序开始时我调用initpara()初始化全局指针结构,编译都通过了,在进行debug版本中调试时,该指针结构在.cpp文件定义的函数中都运行正常,但是其他.c文件定义的函数中用到该指针结构时就报错。从内存中显示的结果看,该指针的地址和内容都正确,但是不能进行比较、赋值等一切操作,报不合法的访问。哪位高手能指点一下,谢谢了!!!

[解决办法]
首先不建议你使用全局变量
其次不建议你混用.cpp和.c,没有任何理由做这种事情

如果一定用这种不好的方式,需要做这样的事情
在cpp定义变量时,这样定义:
extern "C" {
int a;
};

在.h中声明如下
#ifdef _cplusplus
extern "C" {
#endif
extern int a;
#ifdef _cplusplus
};
#endif

问题出现的原因时:在cpp和c中对int a进行编译时,编译器采用不同的编码方式。对于.cpp,为了实现重载的目标,对所有实体(包括变量和函数)进行了一些修饰,使得符号名不为_a,而在.c中没有任何修饰,直接是_a

热点排行