最近在工作中遇到了修改C++代码嵌入到C代码中去,C肯定不能直接用C++代码,就需要自己去修改成C代码,所以我就决定在C中调用C++动态库(谁让我懒呢),话不多说,直接上步骤

第一步:编写C++代码

int_sum.cpp:

#include "int_sum.h"

int int_sum(int num0, int num1)
{
  return num0 + num1;
}

int_sum.h:
#ifndef __READ_DIR_H__
#define __READ_DIR_H__

#ifdef __cplusplus
extern "C" {
#endif
  int int_sum(int num0, int num1);
 #ifdef __cplusplus
}
#endif
#endif
第二步:编成动态库

g++ -fPIC -shared -o libint_sum.so int_sum.cpp int_sum.h

成功如下图所示:

第三步:编写C代码

test.c:

#include <stdio.h>
#include "int_sum.h"

int main()
{
  int sum = int_sum(1, 2);
  printf("%d\n", sum);
  return 0;
}

第四步:调用动态库,生成可执行程序,并执行程序

g++ -L. -lint_sum test.c -o test

成功如下图所示:

到这里就大功告成辣,总的来说还是比较简单的,但是在工作中再简单的东西,不经常使用也是会很容易忘记的,每次都去百度都是时间成本的浪费,所以做好笔记是一件非常重要的事情,以后遇到类似问题直接查阅,提高工作效率

C代码调用C++动态库的更多相关文章

  1. Delphi XE7调用C++动态库出现乱码问题回顾

    事情源于有个客户需使用我们C++的中间件动态库来跟设备连接通讯,但是传入以及传出的字符串指针格式都不正确(出现乱码或是被截断),估计是字符编码的问题导致.以下是解决问题的过程: 我们C++中间件动态库 ...

  2. JNI_Android项目中调用.so动态库

    JNI_Android项目中调用.so动态库 2014年6月3日 JNI学习 參考:http://blog.sina.com.cn/s/blog_4298002e01013zk8.html 上一篇笔者 ...

  3. java使用JNA框架调用dll动态库

    这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative.其中JNA调用DLL是最方便的. ·JNI ·JNA ·JNative java使用 JNI来调用dll动态 ...

  4. c#调用c++动态库的一些理解

    调用c++动态库一般我们这样写   [DllImport("UCamer.dll", CallingConvention = CallingConvention.Winapi)] ...

  5. C#调用C++动态库(dll)

    在实际软件开发过程中,由于公司使用了多种语言开发,在C#中可能需要实现某个功能,而该功能可能用其他语言已经实现了,那么我们可以调用其他语言写好的模块吗?还有就是,由于C#开发好的项目,我们可以利用re ...

  6. C#总结(四)调用C++动态库

    由于公司很多底层的SDK,都是C++开发,上层的应用软件却是C# Winform程序.在实际工作的过程中,就经常碰到了C# 程序调用C++ 动态库的问题.最近一直在和C++ 打交道,C# 怎么调用C+ ...

  7. python调用.net动态库

    # python调用.net动态库 ### pythonnet简介------------------------------ pythonnet是cpython的扩展- pythonnet提供了cp ...

  8. 使用ctypes在Python中调用C++动态库

    使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...

  9. .netcore在linux下使用P/invoke方式调用linux动态库

    http://www.mamicode.com/info-detail-2358309.html   .netcore下已经实现了通过p/invoke方式调用linux的动态链接库(*.so)文件 1 ...

  10. 调用 C 动态库

    调用 C 动态库 由 王巍 (@ONEVCAT) 发布于 2015/11/04 C 是程序世界的宝库,在我们面向的设备系统中,也内置了大量的 C 动态库帮助我们完成各种任务.比如涉及到压缩的话我们很可 ...

随机推荐

  1. 字符串类型如何格式化保留小数点后两位【ToString("0.00")】

    废话都不想写了,直接上图 遇到将decimal字段或者double字段转换成字符串string类型字段时想直接保留小数点后面两位的时候可以有个比较简易的格式化写法 也就是 str.ToString(& ...

  2. <input> oninput事件

    该事件在 <input> 或 <textarea> 元素的值发生改变时触发.onkeyup事件:在iphone(ios)中文输入会触发不到

  3. 统信系统部署es

    rpm -ivh jdk-17.0.4.1_linux-x64_bin.rpm groupadd es && useradd -d /home/es -g es estar -xzvf ...

  4. Odoo12 + Windows+Visual Studio Code环境安装

    参考 https://www.cnblogs.com/ecprodoo/p/13195748.html 1.要用odoo12需要安装以下几个软件 (1)Python 3.7, Python 3.8支持 ...

  5. Anaconda配置环境变量

    环境变量里写自己的Anaconda下载目录,找到对应的文件位置,然后把这三个上移到最上面,点击确定即可配置完成 出现这个环境变量就成功啦 在输入conda 出现这个就表明你的Anaconda已经好了

  6. 瑞士军刀 sox 系列 :给.raw文件添加header变身.wav文件

    1.先去安装 sox https://sourceforge.net/projects/sox/files/sox/ 2.将sox的安装目录加到系统path变量里. 3.开始执行命令 sox -t r ...

  7. unity 调试 packages

    package中代码vs无法f12跳转 解决方法 1 把包copy出来 2 Package Manager->Add package from disk 3 选择包文件中的package.jso ...

  8. rust crm 镜像源管理

    一.下载crm cargo install crm https://github.com/wtklbm/crm 二.命令 # 在终端执行 # # NOTE: # - [args] 表示 args 是一 ...

  9. sqlserver存储过程学习

    存储过程学习  一.定义变量 --简单赋值  declare @a int set @a=5  print @a     --使用select语句赋值  declare @user1 nvarchar ...

  10. shr8.2视图配置注意点