我正在尝试使用 Cython 从 python 生成 c 代码,但名称修饰似乎存在一些问题。我首先生成将代码从 python 转换为 c 代码,然后使用 gcc 将代码编译为 .so 。我想使用 cython 而不是 C/python API 的原因是因为我稍后将在更复杂的类上使用它,我想稍后成为一个库以提高速度等(我很难找到去的人从 python 到 C++,因为它通常是相反的)。下面是我必须尝试执行代码的所有代码(但失败)。任何输入将不胜感激。谢谢!
#hello.pyx
def say_hello():
print "Hello World!"
#generate the c code
cython -a hello.pyx
#creates the shared library
gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.6 -o libhello.so hello.c
//temp.cpp
#include <iostream>
extern "C" {
void say_hello();
};
using namespace std;
int main(){
say_hello();
return 1;
};
#attempt to compile (this is where it fails)
g++ -I/usr/include/python2.6/ -lpython2.6 -L./ -lhello temp.cpp -o temp
这是错误消息:
/tmp/ccpKHOMl.o: In function main: temp.cpp:(.text+0x5): undefined reference to say_hello' /tmp/ccpKHOMl.o:
In function __static_initialization_and_destruction_0(int, int):
temp.cpp:(.text+0x33): undefined reference to std::ios_base::Init::Init()
temp.cpp:(.text+0x38): undefined reference to std::ios_base::Init::~Init()
collect2: ld returned 1 exit status