Динамическая библиотека, использующая статическую библиотеку в c ++ ошибка искажения имени - PullRequest
0 голосов
/ 11 февраля 2012

Я пытаюсь создать динамическую (.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);

Спасибо

1 Ответ

1 голос
/ 14 февраля 2012

Ответ можно получить из этого вопроса

Динамическая библиотека использует библиотеки статики, появляются неопределенные символы

Добавлено для достижения цели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...