| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> extern “C“的使用 -> 正文阅读 |
|
[C++知识库]extern “C“的使用 |
目录 ? 引言? 有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern "C",意思是告诉编译器,将该函数按照C语言规则来编译。比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree两个接口来使用,但如果是C项目就没办法使用,那么他就使用extern “C”来解决。 1、C++程序调用C的库我们这里以一道栈的OJ为例子:LeetCode.20有效的括号,我们这里是要用到用C语言写的一个静态库的栈方便来调用 ?
?如下图:
?①我们先创建一个新的项目(这里用到的编译器是VS2019),选择windows桌面向导(也可以选择静态库) ? ?②配置新项目 ?③选择静态库,空项目 ?④将之前用C语言写好的栈的接口函数拷贝到库中 ? ?⑤生成后缀为.lib的库
?其中? “../” 表示返回上一层的文件
之后就可以看到报的红色警告消除了,这样声明头文件,相当于告诉编译器,有这些函数,我们再次编译链接发现“无法解析的外部函数”,我们还需要做一些配置,才能链接起来
①附加库目录(Stack1下的debug文件) ? 将debug中的Stack1.lib库给放到附加库目录里面去,就是将建立的Stack1中的debug路径拷贝到附加库目录里面 ?②附加依赖项(将库给链接上)Stack1.lib;给加在最前面,注意分号不能丢掉
最后再编译运行 ?调用成功!! 2、C程序调用C++的库?当我们写C的程序,需要调用C++的库时候,也同样需要extern "C"
?同样编译产生一个后缀为.lib的文件
之后编译链接,你会发现又是链接不上
这里extern "C" 是使C++静态库以C的函数名修饰规则去处理函数,从而让C文件识别出这些函数并顺利调用。? 我们可以这样改变,利用条件编译的方法,可以使C++的库以C的函数名修饰规则去修饰函数,从而生成.lib
最后编译链接运行,观察后缀为test.c,证明C调用C++成功? 运行成功!!! 这就是extern "C"的用法啦,谢谢大家!! |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:52:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |