Я пытаюсь создать динамическую (.so) библиотеку-оболочку с драйвером mongoDB c ++. Нет проблем с компиляцией, но когда я тестирую ее в примере программы на C ++, я получаю сообщение об ошибке
undefined symbol: _ZN5mongo18DBClientConnection15_numConne
что, как я полагаю, связано с проблемами искажения имен.
Я скомпилировал библиотеку как
g++ -fPIC -shared mongoquery.cpp -I/pathto/mongodriver -lmongoclient -lboost_thread-mt -lboost_filesystem -lboost_program_options -o libmongoquery.so
Вот программа, которую я использую для тестирования:
#include <iostream>
#include <dlfcn.h>
#include "mongoquery.hpp"
using namespace std;
int main()
{
void *lib_handle;
int (*fn)(int *,string);
lib_handle=dlopen("./libmongoquery.so",RTLD_NOW);
if(!lib_handle)
{
cerr<<"Error"<<dlerror();
return 1;
}
fn=(int (*)(int *,string))dlsym(lib_handle,"count_query");
string q="{}";
int n;
(*fn)(&n,q);
cout<<n;
dlclose(lib_handle);
return 0;
}
заголовок mongoquery.hpp содержит
#include <iostream>
#include <client/dbclient.h>
#define HOST "localhost"
#define COLLECTION "test.rules"
using namespace mongo;
using namespace std;
class mongoquery
{
private:
string q;
mongo::DBClientConnection c;
public:
mongoquery(string);
int result_count();
};
int count_query(int *,string);
Спасибо