我有一个第三方 C++ API,带有头文件的 Linux 动态库 (.so)。
我的问题是,我可以直接编写一个绑定文件并用于boost.python
创建 python 绑定。我试过这样做,我只从 API 向我的 bind.cc 文件添加了一个函数,编译它并创建了另一个.so
文件。但是当我在 python3 中导入它时,它抛出了一个ImportError
.
这是我的绑定文件:
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include "tp_api.h"
BOOST_PYTHON_MODULE(bb_api)
{
using namespace boost::python;
def("tpGetAPIVersion", tpGetAPIVersion);
}
构建命令:
g++ -O3 -Wall -shared -std=c++11 -fPIC -undefined -I/usr/local/include -L/usr/local/lib -I/usr/include/python3.8 -lboost_python39 -o tp_api python3-config --extension-suffix
bind.cc
这将创建:tp_api.cpython-38-x86_64-linux-gnu.so
。
然后在python3中:
from tp_api import tpGetAPIVersion
抛出:
import Error undefined symbol:
_ZTIN5boost6python7objects21py_function_impl_baseE.