C/C++ 混合编程
如何在C++中调用已经被编译好的C函数?下面的小例子展示了这个过程:
1. 假设某C函数如下定义
/* file foo.c*/
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
编译并生成DLL:
gcc -fpic –c foo.c
gcc –shared -o foo.dll foo.o
2. 在C++中调用这个被编译后的C函数
// file test.cpp
#include <iostream>
extern "C"
{
int add(int x, int y);
}
int main()
{
#ifdef __cplusplus
std::cout << "C++ defined" << std::endl;
#else
std::cout << "C++ undefined" << std::endl;
#endif
std::cout << add(1, 2) << std::endl;
return 0;
}
编译并生成可执行文件:
g++ -o test.exe test.cpp foo.dll
3. 原因分析:
函数add()被C编译器编译后在库中的名字为_add,而C++编译器则会产生_add_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号extern “C” 来解决这个问题。
附示例代码
转载于:https://www.cnblogs.com/papam/archive/2009/08/26/1554555.html
C/C++ 混合编程相关推荐
- matlab两个多项式相除,C++和MATLAB混合编程求解多项式系数(矩阵相除)
摘要:MATLAB对于矩阵处理是非常高效的,而C++对于矩阵操作是非常麻烦的,因而可以采用C++与MATLAB混合编程求解矩阵问题. 主要思路就是,在MATLAB中编写函数脚本并使用C++编译为dll ...
- C和C++混合编程的Makefile的编写!
在项目实践中,经常遇到C和C++混合编程的情况. 目前的业务需求是: c写的几个文件,和一个C++文件要整合为一个动态库,被C++调用.而这个动态库的生成过程中,会链接几个基础的开发库,比如libz, ...
- 怎样用matlab打开mw文,C# matlab混合编程 MWArray使用笔记
C# matlab混合编程 徐凯Email:xukai19871105@http://www.doczj.com/doc/1a6e191fff00bed5b9f31dbf.html 这几天突然想搞一搞 ...
- matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)
在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目的. 1. 使用matlab生成dll文件 1.1 首先需要带有 ...
- .Net(c#) 通过 Fortran 动态链接库,实现混合编程
c# 与 Fortran 混合编程解决方案主要有两种: 1. 进程级的交互:在 Fortran 中编译为控制台程序,.Net 调用(System.Diagnostics.Process),然后使用 P ...
- c 与matlab混编,谈谈Matlab与C/C++或C#的互调用(混合编程)
记得当初一个师姐问我知不知道如何在Matlab里调用C++的程序,还真把我问住了.因为我以前就知道C++调用Matlab的方法,这方面网上资料一大堆.没想到现在自己突发奇想又遇到另外一个问题,Matl ...
- Linux C++与Python混合编程(g++生成链接库与python调用)
gcc/g++ 链接库的编译与链接 这一篇对动态链接库和静态链接库以及编译结果讲得很清楚,目前看到最好的. Linux下Python与C++混合编程
- 基于引擎的matlab+vc混合编程的配置
前段时间在项目中做了一些关于基于引擎的vc+matlab混合编程的工作. 如果你是混合编程新手,我相信使用引擎的方式编程是比较简单快捷的一种方式. 当然这种方法也有其缺点,就是不能脱离matlab运行 ...
- 开题:在移动开发中使用JavaScript进行混合编程提高代码复用率
2019独角兽企业重金招聘Python工程师标准>>> 问题 通常开发一个移动应用,因为存在iOS和Android两种操作系统,因此所有代码都要使用两种语言编写两遍,因此几乎所有开发 ...
- c 使用matlab引擎,[转载]C与MATLAB混合编程之调用MATLAB引擎
Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...
最新文章
- MultipartFile 使用 记录
- HashTable和HashMap的区别详解
- 数据可视化模板_10分钟,做一份数据可视化分析报表
- 学完Web前端后发展方向有哪些呢?
- leetcode421. 数组中两个数的最大异或值(贪心算法)
- thinkphp仿百度文库网站源码
- 鸿蒙OS加持!华为MatePad2系列将搭载骁龙888/麒麟9000芯
- 调整Redmine的用户显示格式
- Oracle.start with … connect by [… and] prior…order siblings by …
- JAVA-1007. 素数对猜想 (20)
- 浅析微信支付:商户平台开通现金红包、指定用户发放、红包记录查询
- 给ftp服务器创建文件夹,ftp服务器上创建文件夹
- 全民主公2怎么在电脑上玩 全民主公2安卓模拟器玩法教程
- #芯片# R8025(RX-8025T)
- 如何群发邮件,5秒帮你搞定
- LeetCode每日一题--有序队列(整理最小表示法)
- 典型计算机控制的电子测试系统组成,LIV测试系统的结构组成和应用分析
- 特殊字符编码格式数据库不支持
- 经纬度、平面坐标系转换方法
- GeniePath:Graph Neural Networks with Adaptive Receptive Paths 论文详解 AAAI2019
热门文章
- 博士Nature发文:研究生阶段,4点经验助你学术“独立”!
- 「彩票假说」要修正?王言治团队:神经网络要「中奖」,秘密在于学习率!|ICML 2021...
- 到了管理层我才发现,这些管理知识应该尽早学起来!
- AI自动评审论文,CMU这个工具可行吗?
- 就算是戴上口罩,AI也知道你在说什么
- 计算机视觉的数据增广技术大盘点!附涨点神器,已开源!
- 一文理解Ranking Loss/Margin Loss/Triplet Loss
- 2020年最火本科生专业来了!180所高校新增人工智能专业
- 我被裁员了!让保安把身患绝症的我被强赶出公司,亲身经历的噩梦!
- 用LSTM实现英文写作