c++ - 动态库在c++名称修改错误中使用静态库

标签 c++ linux mongodb dynamic-library

我正在尝试根据 mongoDB C++ 驱动程序创建一个动态 (.so) 包装器库。编译没有问题,但是当我在 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);

谢谢

最佳答案

从这个问题可以得出答案

Dynamic library uses statics libraries, undefined symbols appears

为实现目的添加

关于c++ - 动态库在c++名称修改错误中使用静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234443/

相关文章:

c++ - 无法使用 Qt 5 读取文本文件

c++ - 如何有效地将底层数据从 std::string 移动到另一种类型的变量?

c++ - 录音/混音器软件

java - 如何使用 MongoTemplate 将单个字段插入到 JSON 中?

c++ - 计算发送/接收持续时间 - Outlook

linux - 如何统计某个目录下所有文件中某个单词的出现次数?但每个文件每个单词的计数仅增加一次

c++ - vim - 某些折叠未保存

linux - CentOS 7's vim can' 无法打开帮助(以 root 身份运行时),因为它无法处理 gzip 压缩的帮助文件

Spring 数据 mongodb : Optional @Query parameter no longer works

node.js - 使用 nodejs/mongoose 部分更新子文档