当前位置:首页 » 编程语言 » 在pythonso库

在pythonso库

发布时间: 2022-11-20 01:11:17

A. python 怎么调用so文件

当需要采用调用c++的程序的时候,需要对原有的数据加一个extern "C"封装一下即可。

采用g++编译的代码也需要的,原因可能是因为c++编译器编译后的二进制so文件中,对c++的函数进行了重新的命名导致的。
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(); }
}
以下两个网页又更详细的介绍
http://blog.waterlin.org/articles/using-python-ctypes-to-link-cpp-library.html

http://stackoverflow.com/questions/145270/calling-c-c-from-python

最后需要补充的一个问题是:当我调用so文件的时候,会发生一个有趣的现象:

我把python放到streaming找运行的时候,发现streaming始终查找不到so,但是数据却是被上传到hadoop的对应的work目录下。

后来定位到原因:

是python加载动态库方面是默认从系统lib库上查找库文件。
我的目录在当前目录下,所以需要从libdy.so变为./libdy.so

B. python调用c语言动态库dll/.so中的函数的参数是结构体的问题

java源自C++,C++源自C语言....

各有优点呀,不知道要怎么回答了,或许楼主是搞C语言的吧,这些语言都各有特点呀...

首先应该清晰,Java是由C++发展而来的,他保留了c++的大部分内容,类似于c++,
但句法更清晰,规模更小,更易学。他是在对多种程式设计语言进行了深入细致研究的
基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷,而产生的一种
新的完全方面向对象的语言。
Java和c++的相似之处多于不同之处,但两种语言问几处主要的不同使得Java更容易
学习,并且编程环境更为简单。
因篇幅所限,这里不能完全列出不同之处,仅列出比较显着的差别:

1.指针
Java无指针,并且增添了自动的内存管理功能,从而有效地防
止了c/c++语言中指针操作失误,如指针悬空所造成的系统崩溃。
比w操作返回一对象的引用,类似于c++中的引用;在c++中,
new返回一个对象的指针。在Java中无指针,不会遇见下面这样的
语句:
Mywork?>Mywork();
没有指针的程式无法访问不属于他的内存,消除了在c++
中?些常见的错误,这有利于Java程式的安全。
2.多重继承
c++支持多重继承,这是c++的一个特征,他允许多父类派
生一个类。尽管多重继承功能非常强,但使用复杂,而且会引起许多麻
烦,编译程式实现他也非常不容易。Java不支持多重继承,但允许一个
类继承多个接口(界面),实现了c++多重继承的功能,又避免了c++的
许多缺陷。

C. python调用c函数

Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过
1. Python 调用 C (base)
想在python中调用c函数, 如这儿的fact
#include <Python.h>

int fact(int n)
{
if (n <= 1)
return 1;
else
return n * fact(n - 1);
}

PyObject* wrap_fact(PyObject* self, PyObject* args)
{
int n, result;

if (! PyArg_ParseTuple(args, "i:fact", &n))
return NULL;
result = fact(n);
return Py_BuildValue("i", result);
}

static PyMethodDef exampleMethods[] =
{
{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},
{NULL, NULL}
};

void initexample()
{
PyObject* m;
m = Py_InitMole("example", exampleMethods);
}

把这段代码存为wrapper.c, 编成so库,
gcc -fPIC wrapper.c -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

然后在有此so库的目录, 进入python, 可以如下使用
import example
example.fact(4)

2. Python 调用 C++ (base)
在python中调用C++类成员函数, 如下调用TestFact类中的fact函数,
#include <Python.h>

class TestFact{
public:
TestFact(){};
~TestFact(){};
int fact(int n);
};

int TestFact::fact(int n)
{
if (n <= 1)
return 1;
else
return n * (n - 1);
}

int fact(int n)
{
TestFact t;
return t.fact(n);
}
PyObject* wrap_fact(PyObject* self, PyObject* args)
{
int n, result;

if (! PyArg_ParseTuple(args, "i:fact", &n))
return NULL;
result = fact(n);
return Py_BuildValue("i", result);
}

static PyMethodDef exampleMethods[] =
{
{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},
{NULL, NULL}
};

extern "C" //不加会导致找不到initexample
void initexample()
{
PyObject* m;
m = Py_InitMole("example", exampleMethods);
}

把这段代码存为wrapper.cpp, 编成so库,
g++ -fPIC wrapper.cpp -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

然后在有此so库的目录, 进入python, 可以如下使用
import example
example.fact(4)

3. Python 调用 C++ (Boost.Python)
Boost库是非常强大的库, 其中的python库可以用来封装c++被python调用, 功能比较强大, 不但可以封装函数还能封装类, 类成员.
http://dev.gameres.com/Program/Abstract/Building%20Hybrid%20Systems%20with%20Boost_Python.CHN.by.JERRY.htm
首先在ubuntu下安装boost.python, apt-get install libboost-python-dev
#include <boost/python.hpp>
char const* greet()
{
return "hello, world";
}

BOOST_PYTHON_MODULE(hello)
{
using namespace boost::python;
def("greet", greet);
}

把代码存为hello.cpp, 编译成so库
g++ hello.cpp -o hello.so -shared -I/usr/include/python2.5 -I/usr/lib/python2.5/config -lboost_python-gcc42-mt-1_34_1

此处python路径设为你的python路径, 并且必须加-lboost_python-gcc42-mt-1_34_1, 这个库名不一定是这个, 去/user/lib查

然后在有此so库的目录, 进入python, 可以如下使用
>>> import hello
>>> hello.greet()
'hello, world'

4. python 调用 c++ (ctypes)
ctypes is an advanced ffi (Foreign Function Interface) package for Python 2.3 and higher. In Python 2.5 it is already included.
ctypes allows to call functions in dlls/shared libraries and has extensive facilities to create, access and manipulate simple and complicated C data types in Python - in other words: wrap libraries in pure Python. It is even possible to implement C callback functions in pure Python.
http://python.net/crew/theller/ctypes/

#include <Python.h>

class TestFact{
public:
TestFact(){};
~TestFact(){};
int fact(int n);
};

int TestFact::fact(int n)
{
if (n <= 1)
return 1;
else
return n * (n - 1);
}

extern "C"
int fact(int n)
{
TestFact t;
return t.fact(n);
}
将代码存为wrapper.cpp不用写python接口封装, 直接编译成so库,
g++ -fPIC wrapper.cpp -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

进入python, 可以如下使用
>>> import ctypes
>>> pdll = ctypes.CDLL('/home/ubuntu/tmp/example.so')
>>> pdll.fact(4)
12

D. Python怎么调用.so动态文件库

一、对于你的问题,首先明确测试类型,然后才能明确自动化测试类型,最后定位哪个类型用哪个方面的自动化测试工具。 1、测试类型可以包括:白盒测试、黑盒测试(功能测试、性能测试)等。 2、不同的测试类型使用的自动化测试方法不同,白盒测试...

E. Python 常用的标准库以及第三方库有哪些

参考:知乎
Python 常用的标准库以及第三方库


standard libs:

itertools

functools 学好python有必要掌握上面这两个库吧,
re 正则
subprocess 调用shell命令的神器
pdb 调试
traceback 调试
pprint 漂亮的输出
logging 日志
threading和multiprocessing 多线程
urllib/urllib2/httplib http库,httplib底层一点,推荐第三方的库requests
os/sys 系统,环境相关
Queue 队列
pickle/cPickle 序列化工具
hashlib md5, sha等hash算法
cvs
json/simplejson python的json库,据so上的讨论和benchmark,simplejson的性能要高于json
timeit 计算代码运行的时间等等
cProfile python性能测量模块
glob 类似与listfile,可以用来查找文件
atexit 有一个注册函数,可用于正好在脚本退出运行前执行一些代码
dis python 反汇编,当对某条语句不理解原理时,可以用dis.dis 函数来查看代码对应的python 解释器指令等等。

3th libs:

paramiko ssh python 库
selenium 浏览器自动化测试工具selenium的python 接口
lxml python 解析html,xml 的神器
mechanize Stateful programmatic web browsing

pycurl cURL library mole for Python
Fabric Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.

xmltodict xml 转 dict,真心好用
urllib3 和 requests: 当然其实requests就够了 Requests: HTTP for Humans
flask web 微框架
ipdb 调试神器,同时推荐ipython!结合ipython使用
redis redis python接口
pymongo mongodbpython接口
PIL python图像处理
mako python模版引擎
numpy , scipy 科学计算
matplotlib 画图

scrapy 爬虫
django/tornado/web.py/web2py/uliweb/flask/twisted/bottle/cherrypy.等等 python web框架/服务器
sh 1.08 — sh v1.08 documentation 用来运行shell 模块的 极佳选择

F. Python 调用 so

先来一个网上随便都能找得到的例子吧:先来一个test.c

在来一个test.h:

然后将其编译成.so文件:

最后在python文件里面调用:

然后在终端运行:

嗯,python2的这个数字精度的bug也是醉了

当然了,ctypes不是这样简单的模块,否则也不会放到标准库里面去

(未完待续。。。)

G. python怎样嵌入c

用c语言编写一个动态库,提供两个函数,两个数的整形求和,两个浮点数的求和。取名为mylib.c。

将c函数文件编译成so动态库。运行gcc mylib.c -fPIC -shared -o libtest.so命令,在目录下可以看到生成的库文件libtest.so。

Python调用so库文件。首先导入ctypes,其次用CDLL加载so文件,最后调用对应的函数。将python代码保存到pydemo.py中。

执行python pydemo.py查看运行结果。

众多python培训视频,尽在python学习网,欢迎在线学习!

H. python怎么调用安卓的.so文件

调用不了的,CPU架构都不一样,一个是x86指令集,一个是arm指令集,怎么调?
就算是指令集一样的,你windows的程序也调用不了Linux的so库。

I. python可以调用.so或.a库吗

应该可以的。
关键是你要确定.a或.so是用C或C++编写的。
还有就是你要清楚地知道调用方法的接口。

用这下面的方式来调用

import ctypes
c = ctypes.cdll.LoadLibrary('xxx.so')
c.xxx(para)

热点内容
php解压程序 发布:2025-01-15 17:06:22 浏览:140
刷助力脚本 发布:2025-01-15 17:02:31 浏览:518
c盘里的用户文件夹可以删除 发布:2025-01-15 16:56:45 浏览:949
虚幻4编译到哪里 发布:2025-01-15 16:50:19 浏览:754
透明度渐变android 发布:2025-01-15 16:45:08 浏览:833
dos连接oracle数据库 发布:2025-01-15 16:41:39 浏览:904
网络配置比较低怎么做 发布:2025-01-15 16:35:38 浏览:361
android弹出键盘监听 发布:2025-01-15 16:35:11 浏览:207
uz画图编程 发布:2025-01-15 16:32:44 浏览:883
ppt怎么解压 发布:2025-01-15 16:14:58 浏览:849