【问题标题】:Linker Error with Berkeley DB and Visual C++Berkeley DB 和 Visual C++ 的链接器错误
【发布时间】:2011-07-03 10:33:08
【问题描述】:

您好,我是一名实习生,我的工作是将程序从 linux c 移植到 visual c。 我必须使用 Berkeley DB 和 Visual C++。 尝试了一段时间后,我得到了链接错误

berkeleyDB.obj:错误 LNK2019:无法解析的外部符号“int __cdecl database_select_end(unsigned int,unsigned int,struct chunk * const,int)”(?database_select_end@@YAHIIQAUchunk@@H@Z) 在函数“void __cdecl”中引用op_ds_bulk(unsigned int,unsigned int *,int)" (?op_ds_bulk@@YAXIPAIH@Z)
berkeleyDB.obj:错误 LNK2019:无法解析的外部符号“void __cdecl database_sync(void)”(?database_sync@@YAXXZ) 在函数“void __cdecl op_ds_bulk(unsigned int,unsigned int *,int)”(?op_ds_bulk@@YAXIPAIH@ Z)
berkeleyDB.obj:错误 LNK2019:无法解析的外部符号“void __cdecl database_insert_bluk(struct chunk *,int)”(?database_insert_bluk@@YAXPAUchunk@@H@Z) 在函数“void __cdecl op_ds_bulk(unsigned int,unsigned int *,int) 中引用)" (?op_ds_bulk@@YAXIPAIH@Z)
berkeleyDB.obj:错误 LNK2019:函数 _main 中引用的无法解析的外部符号“int __cdecl database_open(int,char *)”(?database_open@@YAHHPAD@Z)

不知道那些是什么, 请帮助我

【问题讨论】:

    标签: c++ berkeley-db


    【解决方案1】:

    它们是经过 C++ 修饰(或“修饰”)的函数名称。 C++ 允许函数重载——具有相同名称但具有不同参数签名的多个函数——因此它需要将参数等编码到函数名称中以在链接时区分多个重载。您的数据库库很可能是用 C 语言构建的,并且没有修饰名称。

    尝试将您的 db.h 包含在 extern "C"

    extern "C"
    {
        #include <db/db.h>
    }
    

    告诉编译器将 API 视为 C 函数,而不是 C++。

    (看起来你也有错字:database_insert_bluk 而不是_bulk。)

    另外,Berkeley DB 似乎提供了一个 C++ 接口#include &lt;db/db_cxx.h&gt;,您可以改用它,但如果您要移植代码,坚持使用 C 接口可能更容易。不同之处可能在于您移植的 Linux 代码被编译为 C,而在这里您将其编译为 C++。

    来自the other comment you've posted:如果您的问题是您实际上根本没有在 Berkeley DB 中进行链接,那么您需要进入项目设置(右键单击项目名称)、C++ 链接选项卡,然后然后将 .lib 文件添加到库列表中以链接到您的项目。您可能还需要指定路径才能找到它,并且您应该为调试和发布模式(设置顶部的下拉菜单)执行此操作。

    【讨论】:

    • 感谢您的回复!!但是当我把这个 #include 放在我的 extern "C" 中时,它给了我错误无法打开包含文件:'db/db.h'。我试图把很多lib文件链接,但它仍然显示错误。可能是我不知道确切的方法。你能给我一些逐步的提示吗?提前谢谢!!!
    • 哦,好的-抱歉,如果我的头文件名或路径有误。 Berkeley DB 标头通常称为 db.h 或类似名称 - 您已经将它包含在源代码的某个位置或您包含的其他文件之一中。你应该寻找这个并将它包装在extern "C"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2012-04-12
    • 1970-01-01
    • 2014-10-17
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多