因为算法效率问题所以要在python中调用C,
先写一个C函数:
cc.cpp:
int ts(int a, int b) {
return a * b;
}
编译 :
g++ -c -fPIC cc.cpp
g++ -shared cc.o -o libcc.so
然后在python中调用ts函数:
ts.py:
from ctypes import *
import os
libcc = cdll.LoadLibrary(os.getcwd() + '/libcc.so')
print libcc.ts(2,3)
运行:
python ts.py
出错:******can not find symbol ts
谷歌了一下,发现是因为c++编译后的文件会把函数名改名(为了实现重载功能)
用extern "C"声明后,就会使用c的方式进行编译,编译后的文件中仍然是定义的函数名
所以只要讲c库中的代码改为:
extern "C"{
int ts(int, int);
}
int ts(int a, int b) {
return a * b;
}
一切正常