Sum*_*ith 5 c++ python boost boost-python python-3.x
我在名为 cpp_examples 的文件夹中有以下文件。
#include <boost/python.hpp>
#include <string>
const std::string hello() {
return std::string("hello, zoo");
}
BOOST_PYTHON_MODULE(zoo) {
// An established convention for using boost.python.
using namespace boost::python;
def("hello", hello);
}
Run Code Online (Sandbox Code Playgroud)
我运行以下命令进行编译。
sumith@rztl516-Lenovo-G575:~/cpp_examples$ g++ zoo.cpp -I/usr/include/python2.7 -I/usr/lib/x86_64-linux-gnu/ -lboost_python -lpython2.7 -o zoo.so -shared -fPIC
Run Code Online (Sandbox Code Playgroud)
它被编译并给了我一个 zoo.so 文件。当我尝试在同一个文件夹中导入和运行 zoo.hello() 时,它可以工作,但没有在 cpp_examples 文件夹外导入
sumith@rztl516-Lenovo-G575:~/cpp_examples$ python2
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zoo
>>> zoo.hello()
'hello, zoo'
>>> exit()
Run Code Online (Sandbox Code Playgroud)
以下是 cpp_examples 文件夹之外的内容。
sumith@rztl516-Lenovo-G575:~$ python2
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zoo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named zoo
>>>
Run Code Online (Sandbox Code Playgroud)
未导入该文件夹的原因可能是什么?。在编译时我检查了 python3 它根本没有编译,我在上面的命令中将 -lpython2.7 更改为 -lpython3.4 并将 -I/usr/include/python2.7 更改为 I/usr/include/python3.4 但是它在编译时给我错误
/usr/bin/ld: cannot find -lpython3.4
Run Code Online (Sandbox Code Playgroud)
如果我能得到这两个问题的答案,那将是一个很大的帮助。谢谢你。
正如@Omnifarious 最初在评论中所述,您应该查看其中存在的目录sys.path以查找可以放置.so文件的位置。import当找到语句时,Python 默认会在此处查找。
当您在包含 的目录中运行 Python 时.so,它很容易找到它,因为第一个条目sys.path实际上是当前目录。
至于链接,您通常应该提供给您的标志,如在类 Unix 系统下编译和链接pythonX.Y-config --ldflags部分中所述。
文档中的示例还提供了使用 Python 的示例输出3.4:
$ /opt/bin/python3.4-config --ldflags
-L/opt/lib/python3.4/config-3.4m -lpthread -ldl -lutil -lm -lpython3.4m -Xlinker -export-dynamic
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |