所以我正在閱讀“匯編語言指南。簡明介紹”一書。作者:James T. Streib。我正在嘗試在 Visual Studio 2019 中運行以下程式:
includelib msvcrt.lib
includelib legacy_stdio_definitions.lib
.686
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte
.data
msg1 byte "Hello World!",0Ah,0
.code
main proc
INVOKE printf, ADDR msg1
ret
main endp
end
本書建議將頂部的庫添加到聯結器->輸入->附加依賴項,但在顫抖著匯編代碼的時候仍然出現以下錯誤:LINK : fatal error LNK1104: cannot open file 'legacy_stdio_definitions. '
有誰知道問題是什么?書中提供的代碼有效嗎?有什么方法可以使程式按照撰寫的方式作業嗎?非常感謝。
uj5u.com熱心網友回復:
解決方案 1
legacy_stdio_definitions.lib 尚未添加到您的專案中,請按照此步驟解決錯誤。
- 在 Visual Studio 中打開專案
- 單擊頂部選單欄中的專案
- 單擊“屬性”>“聯結器”>“在附加依賴項中輸入”單擊旁邊的向下箭頭,然后單擊“編輯”。
添加“legacy_stdio_definitions.lib”并單擊“確定”,然后單擊“確定”。
解決方案 2
注意:
如果 legacy_stdio_definitions.lib 無法決議符號,則 Microsoft 建議將靜態庫包裝在 DLL 中。
因此,您需要使用用于創建您要包裝的靜態庫 (libpost.lib) 的相同版本的 Visual Studio 來構建包裝器 DLL。所以使用VS2010來創建DLL及其匯入庫。
在 VS2019 專案中,洗掉對靜態庫及其頭檔案的所有參考。使用 DLL 的匯入庫及其匯出的包裝函式。
此外
使用 VS2010 構建 DLL 應該處理與 libpost.lib 的任何鏈接問題
至少,您的 DLL 應該為 VS2019 專案需要的功能匯出包裝器。我假設如果您嘗試構建 VS2019 專案但省略向聯結器提供 libpost.lib,則有關未決議符號的結果錯誤訊息應作為包裝 DLL 需要匯出的內容的指南。我還假設您有一個頭檔案,其中包含 libpost.lib 的函式原型(可能還有其他相關資訊)。
如果您將更新與 libpost.lib 鏈接的其他舊專案,則包裝和匯出附加函式和變數可能是有意義的。
對于包裝器匯出的任何內容,請務必注意 MS 指導,即不要跨 DLL 邊界泄漏來自 VS2010 的 CRT 詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342860.html
標籤:视窗 视觉工作室-2019 马斯姆
