запрос коллекции mongodb в c ++ с использованием драйвера mongocxx и возврат набора результатов в python, который вызвал программу c ++ - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь вызвать программу на языке c ++ из python, которая подключается к mongo с помощью mongocxx, запрашивает некоторые данные и возвращает набор результатов в python. Вот моя программа на С ++. содержимое файла программы c ++

#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <iostream>

extern "C" std::vector<std::string> data(){

std::vector<std::string> arr;

mongocxx::instance inst{};
mongocxx::client conn{mongocxx::uri{}};

bsoncxx::builder::stream::document document{};

auto collection = conn["watchman"]["testcol"];
auto cursor = collection.find({});

for (auto&& doc : cursor) {
   std::cout << bsoncxx::to_json(doc) << std::endl;
   arr.push_back(bsoncxx::to_json(doc));
}


return arr;

}

Для компиляции файла C ++ я использую:

g++ --std=c++11 -c -fPIC program.cpp -o program.o $(pkg-config --cflags --libs libmongocxx) -Wl,-rpath,/usr/local/lib

g++ -shared -Wl,-soname,library.so -o library.so program.o

содержимое программы на Python, которая вызывает программу на C ++.

import ctypes
from numpy.ctypeslib import ndpointer

lib = ctypes.CDLL('./library.so')
lib.function.restype = ndpointer(dtype=ctypes.c_int, shape=(10,))

res = lib.data()
print res

ошибка, которую я получаю

Traceback (most recent call last):
  File "d.py", line 4, in <module>
    lib = ctypes.CDLL('./library.so')
  File "/usr/lib64/python2.6/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: ./library.so: undefined symbol: _ZN8mongocxx7v_noabi3uri13k_default_uriE

Любая помощь будет оценена.

...