[英]Linker Error with Berkeley DB and Visual C++
嗨,我是一名實習生,我的工作是將程序從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 op_ds_bulk(unsigned int,unsigned int *,int)”中引用的未解決的外部符號“ void __cdecl database_sync(void)”(?database_sync @@ YAXXZ)(?op_ds_bulk @@ YAXIPAIH @ Z)
berkeleyDB.obj:錯誤LNK2019:未解析的外部符號“ void __cdecl database_insert_bluk(結構塊*,int)”(?database_insert_bluk @@ YAXPAUchunk @@ H @ Z)在函數“ void __cdecl op_ds_bulk(無符號int,無符號int *,int)中引用” )“(?op_ds_bulk @@ YAXIPAIH @ Z)
berkeleyDB.obj:錯誤LNK2019:函數_main中引用的未解析的外部符號“ int __cdecl database_open(int,char *)”(?database_open @@ YAHHPAD @ Z)
不知道那是什么,請幫我
它們是C ++混合的(或“裝飾的”)函數名稱。 C ++允許函數重載-具有相同名稱但具有不同參數簽名的多個函數-因此,它需要將參數等編碼為函數名,以區分鏈接時的多個重載。 您的數據庫庫很可能是用C構建的,並且沒有修飾的名稱。
嘗試將您的db.h包含文件包裝在extern "C"
extern "C"
{
#include <db/db.h>
}
告訴編譯器將API視為C函數,而不是C ++。
(看來您那里也有錯字: database_insert_bluk
不是_bulk
。)
另外,Berkeley DB似乎提供了一個C ++接口#include <db/db_cxx.h>
您可以使用它,但如果要移植代碼,則堅持使用C接口可能會更容易。 不同之處可能是您要移植的Linux代碼被編譯為C,而此處您將其編譯為C ++。
在您發表的其他評論中 :如果您的問題是實際上根本沒有鏈接到Berkeley DB,則需要進入項目設置(右鍵單擊項目名稱),C ++鏈接選項卡,然后將.lib文件添加到庫列表以鏈接到您的項目。 您可能還需要指定找到該路徑的路徑,並且應該在調試和釋放模式下都執行此操作(設置頂部的下拉菜單)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.