[英]How to get unresolved externals in lib error?
是的,我實際上想得到該錯誤。 我正在使用MSVC(命令提示符)。 我想擁有.lib,它要求定義鏈接到它的外部符號。 我必須了解有關靜態鏈接的一些錯誤,因為在我看來,我的方法是合法的:
我有一個大致如下所示的文件:
extern INFO_BLOCK user_setup;
int
crtInit()
{
SetInfoBlock(&user_setup);
return 0;
}
當我嘗試在主要模塊cl main.c file.obj
編譯中使用此文件的.obj時,它說未解析的外部組件。 這是期望的行為。 不過,即使我使用/ include:user_data將file.obj與lib file.obj
打包在一起(坦率地說,在這種情況下,我也不相信它有任何用處)
將.lib與cl main.c /link file.lib
使用不會生成缺少的外部組件,這就是問題所在。 我需要程序員定義該符號。 一旦將.obj放入.lib,extern會被剝奪嗎? 我哪里錯了?
如果main.c
不包含對crtInit
任何引用,則鏈接器沒有理由將該函數拉入生成的二進制文件中-因此,它根本不會“看到”對user_setup
的未解析引用。
當您向鏈接器提及目標文件時 ,無論程序是否需要它,都強制其將目標文件包括在二進制文件中。
與此相反,當您向鏈接器提及一個庫時 ,它將僅使用該庫來解析此時從該庫中提取的目標文件中已經存在的未解析引用 。 如果到目前為止還沒有解決任何問題(或者庫中的任何符號都不滿足),則鏈接程序將完全不使用庫中的任何內容。
以上也是為什么許多鏈接器在鏈接時對庫的順序有些挑剔的原因(通常是從特定到通用-或從“用戶”到“系統”),因為鏈接器通常是單次通過,只會提取它們的內容鏈接過程中此特定點需要“查看”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.