| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1072 人关注过本帖, 1 人收藏
标题:Python,c++ 混编
只看楼主 加入收藏
往生
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2023-1-11
结帖率:50%
收藏(1)
 问题点数:0 回复次数:8 
Python,c++ 混编
请教一下各位大佬;
怎么在Python中调用c++代码?
搜索更多相关主题的帖子: c++ 混编 Python 代码 调用 
2023-01-15 09:44
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:32
帖 子:412
专家分:1646
注 册:2023-1-24
收藏(1)
得分:0 
Python调用C++类
由于C++支持函数重载,在g++以C++方式编译时编译器会给函数的名称附加上额外的信息,这样ctypes模块就会找不到g++编译生成的函数。因此,要让g++按照C语言的方式编译才可以找到生成的函数名。让编译器以C语言的方式编译就要在代码中使用extern关键字将代码包裹起来。
文件名:cpp_called.cpp
程序代码:
//c++
//Python调用c++(类)动态链接库
#include <iostream>
using namespace std;

 
class TestLib
{<!-- -->
    public:
        void display();
        void display(int a);
};
void TestLib::display() {<!-- -->
    cout&lt;&lt;"First display"&lt;&lt;endl;
}

 
void TestLib::display(int a) {<!-- -->
    cout&lt;&lt;"Second display:"&lt;&lt;a&lt;&lt;endl;
}
extern "C" {<!-- -->
    TestLib obj;
    void display() {<!-- -->
        obj.display();
      }
    void display_int(int a) {<!-- -->
        obj.display(a);
      }
}

在命令行或者终端输入编译命令:
g++ -o libpycallcpp.so -shared -fPIC cpp_called.cpp
生成libpycallcpp.so,在Python中调用。
程序代码:
import ctypes
dll = ctypes.cdll.LoadLibrary
lib = dll('./libpycallcpp.so') #刚刚生成的库文件的路径
lib.display()
lib.display_int(0)

结果:
First display
Second display:0

[此贴子已经被作者于2023-1-28 21:03编辑过]


会当凌绝顶,一览众山小.
2023-01-28 21:01
sssooosss
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:3
帖 子:664
专家分:1115
注 册:2019-8-27
收藏
得分:0 
共同进步
2023-01-29 19:44
pvm2000
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:179
专家分:312
注 册:2022-12-22
收藏
得分:0 
Python,c++ 混编
进阶用法
2023-02-17 06:14
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:32
帖 子:412
专家分:1646
注 册:2023-1-24
收藏
得分:0 
共同学习

会当凌绝顶,一览众山小.
2023-02-17 18:21
白砼
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2023-5-18
收藏
得分:0 
这是进阶技术,大佬看看
2023-06-09 10:00
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
回复 2楼 东海ECS
请教一下。调用C++类,和直接运行C++封装好的Exe,这两种方法在执行效率上有差异么? 哪种快?
P.S.
我这边有一个很大数据量的计算,之前用Python写的代码执行效率很低,后来找人做了一个C的程序,执行效率上来了,但是对方只是做了dos界面的程序。
现在想用Python做一个窗口,所想确定是调用C++类,还是直接运行C++封装好的Exe的方式来运行
2023-07-14 09:04
yiyanxiyin
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:9
帖 子:163
专家分:1125
注 册:2023-6-29
收藏
得分:0 
python不是调的c++类, 是调用的dll(so为linux下的共享库,和windows的dll类似), 都用c++写的代码一样的话dll和exe效率几乎一样
2023-07-14 10:21
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
以下是引用yiyanxiyin在2023-7-14 10:21:17的发言:

python不是调的c++类, 是调用的dll(so为linux下的共享库,和windows的dll类似), 都用c++写的代码一样的话dll和exe效率几乎一样

原来如此,感谢
2023-07-18 09:20
快速回复:Python,c++ 混编
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015628 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved