首页 > 编程语言 >python使用ctypes调用gcc编译的dll之g++编译c++代码

python使用ctypes调用gcc编译的dll之g++编译c++代码

时间:2023-07-25 17:45:43浏览次数:45  
标签:gcc python 编译 https test world hello

1、在windows系统将cpp代码编译成可供python调用的dll

1.1 新建header.h代码如下

#pragma once
#define DllExport __declspec( dllexport )
extern "C"
{
    DllExport void hello_world(void);
}

/*
#pragma once 用来防止某个头文件被多次include,这条指令就能够保证头文件被编译一次

extern "C" 在C++源文件中的语句前面加上extern "C",表明它按照类C的编译和连接规约来编译和连接,而不是C++的编译的连接规约。

__declspec(dllexport)关键字从 DLL 中导出数据、函数、类或类成员函数。导出后可供其它DLL或者exe使用。
*/

1.2 新建test.c代码如下

#include <iostream>
#include <string.h>
#include "header.h"

void hello_world() {
    // 打印hello world
    std::cout << "hello world" << std::endl;
}
1.3 编译C++代码
g++ test.cpp -fPIC -shared -o test.dll
1.5 运行python代码
python test.py
# 运行后会打印hello world

2、在Linux系统将cpp代码编译成可供python调用的.so库

2.1 新建header.h代码如下

#pragma once

extern "C"
{
    void hello_world(void);
}

2.2 新建test.c代码如下

#include <iostream>
#include <string.h>
#include "header.h"

void hello_world() {
    // 打印hello world
    std::cout << "hello world" << std::endl;
}

2.3 编译C++代码

g++ test.cpp -fPIC -shared -o test.so

2.4 新建test.py代码如下

import ctypes

# 下面两种加载动态库的方式都可以使用
# test = ctypes.cdll.LoadLibrary('./test.so')
test = ctypes.CDLL('./test.so')

test.hello_world()

2.5 运行python代码

python test.py
# 运行后会打印hello world

#pragma once相关参考
https://www.cnblogs.com/zhangbaochong/p/5164800.html

extern "C"相关参考
https://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html
https://learn.microsoft.com/en-us/cpp/cpp/extern-cpp?view=msvc-170

__declspec(dllexport)相关参考
https://learn.microsoft.com/zh-cn/cpp/build/exporting-from-a-dll-using-declspec-dllexport?view=msvc-170

https://www.cnblogs.com/lisuyun/p/5484017.html

加载dll或so的动态库
https://docs.python.org/zh-tw/3/library/ctypes.html#loading-shared-libraries

c++参数使用可参考
https://gcc.gnu.org/onlinedocs/gcc-12.3.0/gcc/Code-Gen-Options.html
https://gcc.gnu.org/onlinedocs/gcc-12.3.0/gcc/Link-Options.html
https://www.runoob.com/w3cnote/gcc-parameter-detail.html

标签:gcc,python,编译,https,test,world,hello
From: https://www.cnblogs.com/chen55555/p/17564731.html

相关文章

  • 四、python变量与基本数据类型
    上节课复习:1、机器语言、汇编语言、编译型、解释型语言在执行效率、开发效率、跨平台性方面的高低对比2、python解释器与python语言的关系1、python解释器是一款应用程序,专门用来解释python这门语言的语法风格并执行的2、python语言编写的程序最终......
  • python -anconda
    anacondapromptnavigator可以配置另外python版本  condainfo-econdaactivatepython27切换环境conda deactivate回到base环境 VsCode:Ctrl+Shift+P打开命令窗口:选择“Python:SelectInterpreter”  TRANSLATEwithxEnglishArabi......
  • python教程 入门学习笔记 第1天
    初识python一、python语言简介:1、起源:1989年由荷兰的前谷歌程序员吉多.范罗苏姆(龟叔)创造,python的命名来源于英国电视喜剧MontyPython’sFlyingCircus飞行马戏团2、优势:python、Java、c这几种是世界最流行语言;用途广泛,被称为万能语言;语法简洁,上手简单;例如:print("hellowor......
  • var js_usergroup_name python
    如何实现“varjs_usergroup_namepython”作为一名经验丰富的开发者,我很乐意教会刚入行的小白如何实现“varjs_usergroup_namepython”。在这篇文章中,我将为你展示整个实现过程,并提供每个步骤所需的代码和相应的注释。让我们开始吧!实现流程为了更好地理解整个实现过程,我将使......
  • ubuntu20.04 python3.7
    Ubuntu20.04中使用Python3.7Ubuntu20.04是一种广泛使用的Linux操作系统版本,它提供了强大的开发环境和工具。Python是一种流行的编程语言,适用于各种应用场景。在Ubuntu20.04上安装和使用Python3.7版本非常简单。下面将介绍如何在Ubuntu20.04上安装Python3.7,并......
  • ubuntu 设置 python环境变量
    Ubuntu设置Python环境变量在Ubuntu上设置Python环境变量是一项重要的任务,因为它允许您轻松地访问和使用Python解释器、模块和包。本文将向您介绍如何设置Python环境变量,并提供一些示例来帮助您更好地理解。什么是环境变量?环境变量是操作系统中一些特定值的名称,这些值......
  • python3 全景图裁剪
    需求:1、将鱼眼全景图转换为three.js可加载的六面立方体图片 资料查阅:1、目前就找到这个地方有、可能是为父搜索的姿势不对-->前往2、图片包含内容 使用到的python库:1、numpy---太大,这里用于处理图像矩阵变形,计算。2、cv2 --太大,只用到了图像映射(将原始图像......
  • 如何让 Rust 不使用 Visual Studio 的工具链编译
    假如你不想使用VisualStudio进行开发,也不想电脑上多出几个G的累赘,也可以选择使用GNU进行编译,在此记录一下更换工具链的方法。安装后更改安装完成后,确保你的rustup命令可以正常使用。在控制台中执行rustupdefaultstable-x86_64-pc-windows-gnu命令,等待下载完成即可。安......
  • 安装完python后如何正确安装anaconda
    如何正确安装AnacondaAnaconda是一个用于科学计算的Python发行版,它包含了许多常用的数据科学和机器学习库。在安装Anaconda之前,我们首先需要正确安装Python。接下来,我们将一步一步地介绍如何在Windows系统中安装Anaconda。步骤一:安装Python首先,我们需要下载Python的最新版本。在......
  • 【补充】Python之一切皆对象
    【补充】Python之一切皆对象【1】一切皆对象Python中的一切都被视为对象。在Python中,每个值(包括数字、字符串、函数等)都是一个对象并且每个对象都属于特定的类(class)。类定义了对象的属性和行为。因此,可以说Python是一种面向对象的编程语言。对象是类的实例化结果......