簡體   English   中英

鏈接錯誤 - >托管DLL到非托管Lib

[英]Linking error -> Managed DLL to Unmanaged Lib

我有一個托管的C ++ DLL,它使用一個非托管的C ++庫。 我在托管項目的“附加依賴項”中添加了lib文件。 不幸的是,我在msvcprtd.lib鏈接錯誤中已經定義了十幾個std :: locale。

任何想法? 我是否必須將它們構建為dll並將它們鏈接在一起?

您可能需要更改其中一個項目的運行時庫設置,以使它們都相同。 運行時庫設置中的“多線程調試DLL”選項意味着您的項目將鏈接到運行時的DLL版本,而不是您的項目是DLL。 其中 - “多線程調試”意味着它將鏈接到標准庫的.lib版本。

當您將2個使用不同設置的項目鏈接在一起時,它們最終會出現重復的引用。 靜態運行時庫中的一個引用,以及DLL運行時庫中的一個引用。 這是您的錯誤的來源。

您應該選擇哪個設置取決於您是否要將運行時DLL與您的項目一起分發(或者指望已經擁有它們的用戶)。 如果要使用此選項,請選擇DLL運行時庫,否則請選擇非DLL版本。 非DLL版本的缺點是所有運行時庫代碼都將嵌入到DLL / EXE中,這將增加它的大小。

編輯:實際上,再看一下。 此鏈接表明,對於CLR項目(我懷疑您的是托管C ++),您無法使用靜態鏈接選項,因此您需要使用“多線程調試DLL”選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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