最近在处理C编译向C++编译转移的工作,遇到如下问题:
在用C编译的时候,变量的定义在头文件中。由于C编译器支持这种情况,所以能够编译成功。
但是当转移到用C++编译的时候,就提示编译错误。这时候,采用正规的方式来修改代码。
在头文件中用extern声明全局变量。在C文件中,定义变量。C++编译通过。
但是有个问题是,在应用程序链接的时候,这个工程用的是以前的lib库,意思就是上面提到的C文件只会被编译到lib库中,才会使用。
既然用到的是以前的lib库,那么以前的lib库中,怎么会有全局变量的定义呢?
答案就是:以前的全局变量是定义在头文件中的,所有以前的lib库因为include了该头文件,所以就有了定义。
当用C++重新编译改库后,如果C中没有定义就会报link失败。