繁体   English   中英

如何在lib错误中获取未解决的外部问题?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM