gpt4 book ai didi

c++ - 在 C++ 中嵌入 python 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:29 27 4
gpt4 key购买 nike

我正在尝试使用 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

最佳答案

您将无法通过这种方式获得所需的互操作。如果你打开并检查 hello.c,你不会在其中的任何地方找到“static int say_hello”。 Cython 的设计目的是让 Python 使用 C 库,而不是让 C 库使用 python。

您可以在此处查看文档,但不幸的是,这种支持仍然适用于“负责”的 python 解释器,而您正在寻找的是另一种方式。

http://docs.python.org/release/2.5.4/ext/callingPython.html

还有“在另一个应用程序中嵌入 Python”的入门书

http://docs.python.org/2/extending/embedding.html

我不知道你的要求是什么,但在某些情况下你可以成功地将数据写入一个文件,调用一个 Python 程序来咀嚼它,然后从另一个文件中解析结果。与将内容保存在内存中相比,它有点丑陋且速度较慢,但​​在许多情况下完全可行。

关于c++ - 在 C++ 中嵌入 python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13810815/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com