c++筑器       c与c++静态库互调 extern "C" c调c++

121 阅读2分钟

「这是我参与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是不认识的