如何在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++ 混合编程相关推荐

  1. matlab两个多项式相除,C++和MATLAB混合编程求解多项式系数(矩阵相除)

    摘要:MATLAB对于矩阵处理是非常高效的,而C++对于矩阵操作是非常麻烦的,因而可以采用C++与MATLAB混合编程求解矩阵问题. 主要思路就是,在MATLAB中编写函数脚本并使用C++编译为dll ...

  2. C和C++混合编程的Makefile的编写!

    在项目实践中,经常遇到C和C++混合编程的情况. 目前的业务需求是: c写的几个文件,和一个C++文件要整合为一个动态库,被C++调用.而这个动态库的生成过程中,会链接几个基础的开发库,比如libz, ...

  3. 怎样用matlab打开mw文,C# matlab混合编程 MWArray使用笔记

    C# matlab混合编程 徐凯Email:xukai19871105@http://www.doczj.com/doc/1a6e191fff00bed5b9f31dbf.html 这几天突然想搞一搞 ...

  4. matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)

    在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目的. 1. 使用matlab生成dll文件 1.1 首先需要带有 ...

  5. .Net(c#) 通过 Fortran 动态链接库,实现混合编程

    c# 与 Fortran 混合编程解决方案主要有两种: 1. 进程级的交互:在 Fortran 中编译为控制台程序,.Net 调用(System.Diagnostics.Process),然后使用 P ...

  6. c 与matlab混编,谈谈Matlab与C/C++或C#的互调用(混合编程)

    记得当初一个师姐问我知不知道如何在Matlab里调用C++的程序,还真把我问住了.因为我以前就知道C++调用Matlab的方法,这方面网上资料一大堆.没想到现在自己突发奇想又遇到另外一个问题,Matl ...

  7. Linux C++与Python混合编程(g++生成链接库与python调用)

    gcc/g++ 链接库的编译与链接 这一篇对动态链接库和静态链接库以及编译结果讲得很清楚,目前看到最好的. Linux下Python与C++混合编程

  8. 基于引擎的matlab+vc混合编程的配置

    前段时间在项目中做了一些关于基于引擎的vc+matlab混合编程的工作. 如果你是混合编程新手,我相信使用引擎的方式编程是比较简单快捷的一种方式. 当然这种方法也有其缺点,就是不能脱离matlab运行 ...

  9. 开题:在移动开发中使用JavaScript进行混合编程提高代码复用率

    2019独角兽企业重金招聘Python工程师标准>>> 问题 通常开发一个移动应用,因为存在iOS和Android两种操作系统,因此所有代码都要使用两种语言编写两遍,因此几乎所有开发 ...

  10. c 使用matlab引擎,[转载]C与MATLAB混合编程之调用MATLAB引擎

    Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...

最新文章

  1. MultipartFile 使用 记录
  2. HashTable和HashMap的区别详解
  3. 数据可视化模板_10分钟,做一份数据可视化分析报表
  4. 学完Web前端后发展方向有哪些呢?
  5. leetcode421. 数组中两个数的最大异或值(贪心算法)
  6. thinkphp仿百度文库网站源码
  7. 鸿蒙OS加持!华为MatePad2系列将搭载骁龙888/麒麟9000芯
  8. 调整Redmine的用户显示格式
  9. Oracle.start with … connect by [… and] prior…order siblings by …
  10. JAVA-1007. 素数对猜想 (20)
  11. 浅析微信支付:商户平台开通现金红包、指定用户发放、红包记录查询
  12. 给ftp服务器创建文件夹,ftp服务器上创建文件夹
  13. 全民主公2怎么在电脑上玩 全民主公2安卓模拟器玩法教程
  14. #芯片# R8025(RX-8025T)
  15. 如何群发邮件,5秒帮你搞定
  16. LeetCode每日一题--有序队列(整理最小表示法)
  17. 典型计算机控制的电子测试系统组成,LIV测试系统的结构组成和应用分析
  18. 特殊字符编码格式数据库不支持
  19. 经纬度、平面坐标系转换方法
  20. GeniePath:Graph Neural Networks with Adaptive Receptive Paths 论文详解 AAAI2019

热门文章

  1. 博士Nature发文:研究生阶段,4点经验助你学术“独立”!
  2. 「彩票假说」要修正?王言治团队:神经网络要「中奖」,秘密在于学习率!|ICML 2021...
  3. 到了管理层我才发现,这些管理知识应该尽早学起来!
  4. AI自动评审论文,CMU这个工具可行吗?
  5. 就算是戴上口罩,AI也知道你在说什么
  6. 计算机视觉的数据增广技术大盘点!附涨点神器,已开源!
  7. 一文理解Ranking Loss/Margin Loss/Triplet Loss
  8. 2020年最火本科生专业来了!180所高校新增人工智能专业
  9. 我被裁员了!让保安把身患绝症的我被强赶出公司,亲身经历的噩梦!
  10. 用LSTM实现英文写作