簡體   English   中英

Berkeley DB和Visual C ++的鏈接器錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM