我编译了第三方python模块(alembic
),alembic导入了另一个python模块(imath
)by PyImport_ImportModule
,imath又导入了另一个python模块(iex
)by PyImport_ImportModule
。代码如:
BOOST_PYTHON_MODULE(alembic)
{
handle<> imath(PyImport_ImportModule("imath"));
}
BOOST_PYTHON_MODULE(imath)
{
handle<> iex(PyImport_ImportModule("iex"));
}
BOOST_PYTHON_MODULE(iex)
{
scope().attr("BaseExc") = "An Exception";
}
如果我先导入 imath,然后导入 alembic,它会起作用。但是如果我直接导入 alembic,它会在scope().attr("BaseExc") = "An Exception"
. 我已经阅读了boost代码,我确定原因detail::current_scope
是空的,但我不知道为什么。
任何人都可以帮助我吗?为什么会发生这种情况,我该如何避免?
添加:
我无法通过上面的代码重现它。我写了一个cpp文件并用这些代码填充它:
#include "boost/python.hpp"
using namespace boost::python;
BOOST_PYTHON_MODULE(alembic)
{
handle<> imath(PyImport_ImportModule("imath"));
}
然后使用这个选项来编译它:
g++ -fPIC -shared -I/usr/include -L/usr/lib -lboost_python -lpython2.7 -L/usr/lib64 -Wl,-soname,alembicmodule.so -o alembicmodule.so alembic.cpp
它工作正常。我很惊讶,因为在第三方模块中,错误发生在第一行。也许这不是 boost 错误,而是 cmake 错误?
这个问题来自编译选项。Cmake 生成一个链接脚本,该脚本用于libboost_python.a
链接 python 模块alembicmodule.so
。当我更改libboost_python.a
为 时libboost_python.so
,此问题已解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句