在C++控制台项目中使用C工程代码时的注意,避免出现error LNK2019: 无法解析的外部符号

当我们在写 C++控制台项目时候,有时用到一些线程的算法代码项目,这些代码项目是用c写的。当使用时,需要在c的头文件中标注如下内容,才能使得cpp文件能够编译使用c的函数等,才避免在编译时候出现error LNK2019: 无法解析的外部符号###,在_main中引用,这样的错误。如下面:

号 "int __cdecl sift_features(struct _IplImage *,struct feature * *)" (?sift_features@@YAHPAU_IplImage@@PAPAUfeature@@@Z),该符号在函数 _main 中被引用
1>picturecopy1.obj : error LNK2019: 无法解析的外部符号 "struct _IplImage * __cdecl stack_imgs(struct _IplImage *,struct _IplImage *)" (?stack_imgs@@YAPAU_IplImage@@PAU1@0@Z),该符号在函数 _main 中被引用
1>picturecopy1.obj : error LNK2019: 无法解析的外部符号 "void __cdecl fatal_error(char *,...)" (?fatal_error@@YAXPADZZ),该符号在函数 _main 中被引用
1>C:\Users\acer\documents\visual studio 2010\Projects\picturecopy1\Debug\picturecopy1.exe : fatal error LNK1120: 7 个无法解析的外部命令。




此时需要这样解决:


在调用函数的xx.h文件的首尾添加:


#ifdef __cplusplus (其中__cplusplus是cpp中自定义的一个宏!!!)

extern "C"{

#endif

//-------------开始写.h

#include

xx.h的全部内容。

void function();

......

#ifdef __cplusplus

}

#endif


按照以上格式即可以不出现编译error LNK2019: 无法解析的外部符号。。。问题。

其作用请参考文章:extern “C”的作用


你可能感兴趣的:(C/C++学习)