链接器如何解决链接 *.libs 时的歧义?

发布于 2024-11-29 05:07:09 字数 286 浏览 1 评论 0原文

在花了很长一段时间处理未解决的外部问题后,我发现 VS2010 链接了错误的 .lib 文件。

不幸的是,文件被命名为相同的名称。

在项目属性中设置了带有链接(不需要的)lib 的文件夹 具有未链接(想要的)lib 的文件夹是从其他属性表继承的。

所需的库较新,不需要的库则非常旧。

链接器选择了不需要的一个(如上所述)。

链接库的规则是什么? 链接器不应该至少对一些歧义给出警告吗?

编辑: 符号仅在新库中定义。仅当我删除旧库时才会搜索新库(未更改链接器设置)

after very long long time spent with unresolved externals I found that VS2010 was linking wrong .lib file.

Files were unfortunately named with same name.

Folder with linked(unwanted) lib was set in project properties
Folder with unlinked(wanted) lib was inherited from other property sheet

Desired lib was newer date, undesired was very older.

Linker chose the unwanted one (as above).

What are the rules for linking libs?
Shouldn't linker give at least warning on some ambiguity?

edit:
symbol is defined ONLY in NEW lib. And the NEW lib is being searched only when I delete OLD lib (no linker settings changed)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

起风了 2024-12-06 05:07:09

将链接器的 LIB 视为编译器的标头。 LIB 仅具有导出符号的签名,除非它是静态 LIB。 LIB 文件没有附加任何版本

两个 LIB 文件可以具有相同的名称,就像两个头文件可以具有相同的名称一样。作为程序员,你必须使用正确的 LIB/头文件。如果链接器没有找到所有符号,或者符号不正确,它将报告错误(就像编译器对头文件中不一致的符号所做的那样)。

Think of LIBs to Linker as header to compiler. A LIB only has signature of exported symbols, unless it is static LIB. LIB files do not have any version attached to them.

Two LIB file can have same name, as two header files can have. It's you, the programmer, who has to use correct LIB/header file. If the linker doesn't find all symbols, or if symbols are not correct, it will report error (just like compiler will do for inconsistent symbols in header file).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文