【发布时间】:2021-10-11 16:12:00
【问题描述】:
好的,根据我在这里找到的题为“从 Python 调用 C/C++?”的问题的答案。 here,以及在 cppyy 文档网站上,我在 .h 和 .cpp 文件中制作了一些示例类,并尝试将它们包含在 Python 中。虽然 .h 文件很容易包含在内,但当我尝试使用 cppyy.load_library() 函数时,由于某种原因它给了我一个运行时错误。有人可以帮忙吗?我试图在网上寻找解决方案,但显然以前没有人遇到过类似的问题。这就是我在 Jupyter Notebook 中运行的内容:
import cppyy
cppyy.include("foo.h")
cppyy.load_library("libfoo")
最后一行给了我以下错误:
RuntimeError Traceback (most recent call last)
<ipython-input-3-eea6173ad08e> in <module>
----> 1 cppyy.load_library("libfoo")
~\anaconda3\lib\site-packages\cppyy\__init__.py in load_library(name)
219 sc = gSystem.Load(name)
220 if sc == -1:
--> 221 raise RuntimeError('Unable to load library "%s"%s' % (name, err.err))
222 return True
223
RuntimeError: Unable to load library "libfoo"
这是我的 .h 文件:
class Foo {
public:
void bar();
};
这是我的 .cpp 文件:
#include "foo.h"
#include <iostream>
void Foo::bar() { std::cout << "Hello" << std::endl; }
我正在使用命令g++ -c -fPIC foo.cpp -o foo.o 和g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o 来编译我的cpp 代码。
有人可以帮忙吗?
【问题讨论】:
-
我要做的第一件事是确保库是 Python 正在寻找它的地方。
"libfoo"对我来说就像它要搜索 working directory 然后 system path 一样。我也怀疑,但不确定,cppyy.load_library("libfoo")应该是cppyy.load_library("libfoo.so") -
没有自动添加扩展。但是即使更改了系统路径,它仍然不起作用。既不使用
add_library_path函数也不使用os模块在python 提示符下更改我的工作目录。我在这里完全一无所知
标签: python c++ python-3.x loadlibrary cppyy