「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」
c++筑器 c与c++静态库互调
vs19下静态库动态库互调
image-20211208202139722
extern “C”
用extern "C"把下面头文件包括起来是为了告诉编译器该 头文件展开里面的函数是c的风格编译的,不要用c++生成函数名的修饰规则去找,而是用c生成函数名的修饰规则去找
image-20211208232858628
image-20211208233047616
C调C++
image-20211208233658052
image-20211209194856639
image-20211209195942435
c调用c是不出意外的,但是我们是想c调用c++
image-20211209200547690
既然不可以正常映射到地址,那还要用到我们营运而生的extern “C”,但是我们不可以在c项目里面使用,因为我们c不认识extern “C”,所以我们要去c++的静态库里面去用extern “C”把该调的函数括起来,让他知道我们c项目会来调你,你好好的包装一下
image-20211209201655255
因为我们c项目里面头文件展开是会把extern “C”的程序展开的,但是c还是看不懂extern “C”啊,所以我们还要来一层把extern “C”给包起来,让c看得懂
__cplusplus是在c++才会出现的标识符,c中没有这个标识符
image-20211209204645238
法一
image-20211209205325585
法二
image-20211209210446178
总结
c++项目调用C的库 要在c++程序中加extern “C”
c项目中调用c++的库 要在c++静态库中加extern “C”,同时不要忘了需要条件编译,因为extern “C”在c项目中展开c是不认识的