这是我的 C++ 代码:
#include<boost/python.hpp>
#include "mongo/client/dbclient.h"
using namespace mongo;
//DBClientConnection MCONNECT;
int OGS_ext(boost::python::list& ns){
int prod(1);
for(int i=0;i<len(ns);++i){
prod*=boost::python::extract<int>(ns[i]);
}
return prod;
}
BOOST_PYTHON_MODULE(Simulate)
{
using namespace boost::python;
def("OGS_ext",OGS_ext);
}
这是我的 Makefile:
Simulate.so: Simulate.o
g++ -shared -Wl,--export-dynamic Simulate.o -L/usr/lib -lboost_python -L/usr/lib/python2.7/config -lpython2.7 -o Simulate.so
Simulate.o: Simulate.cpp
g++ -fPIC -I/usr/include/python2.7 -I/usr/include -lmongoclient -lboost_thread-mt -lboost_filesystem -lboost_system -c Simulate.cpp
DBClientConnection MCONNECT
注释掉时一切正常。当我取消注释 mongo 连接线时,它会编译,但我在 Python 中收到以下错误:
import Simulate
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./Simulate.so: undefined symbol: _ZTVN5mongo18DBClientConnectionE
我意识到我正在返回一个简单的产品,但我已经剥离了代码以提供一个最小的示例。
我和mongodb有冲突吗?