总结(非原创)
Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。
1. C语言文件:pycall.c
#include
#include
int foo(int a, int b)
{
printf("you input %d and %d\n",a,b);
return a+b;
}
2. gcc编译成动态库libpycall.so: gcc -o libpycall.so -shared -fPIC pycall.c
3. python调用动态库的文件:pycall.py
import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("./libpycall.so")
num = lib.foo(1,3)
print num
print '***finish****'
4. 运行结果
you input 1 and 3
4
***finish****
调用C++动态链接库,需要借助extern "C"来实现
1.C++文件(.cpp)
#include
using namespace std;
class TestLib
{
public:
int display();
void display(int a);
};
int TestLib::display() {
cout<
int num = 233333;
return num;
}
void TestLib::display(int a) {
cout<
}
extern "C" {
TestLib obj;
int display() {
return obj.display();
}
void display_int(int b) {
obj.display(b);
}
}
2.g++编译成动态库:g++ -o libpycallclass.so -shared -fPIC pycallclass.cpp
3.python调用动态库文件:
import ctypes
so = ctypes.cdll.LoadLibrary
lib = so("./libpycallclass.so")
print lib.display()
lib.display_int()
4.结果如下:
First display
233333
Second display:0
通过Jython扩展python(java)
1.java文件(JythonTest.java)
public class JythonTest{
private String user;
public JythonTest(String UserName){
user = UserName;
}
public void greeting(){
System.out.println(user+"Hello World!");
}
}
2.通过java编译器进行编译:javac JythonTest.java
3.python调用文件
#usr/bin/python
import JythonTest
test = JythonTest("Mr. L!")
test.greeting()
4.结果
Mr. L!Hello World!