你如何找到哪个 .lib 文件与哪个函数一起使用?

Posted

技术标签:

【中文标题】你如何找到哪个 .lib 文件与哪个函数一起使用?【英文标题】:How do you find which .lib file goes with which function? 【发布时间】:2017-03-05 12:00:15 【问题描述】:

在链接器设置中,您应该告诉编译器要包含哪些 .lib 文件。我还没有弄清楚的一件简单的事情是在使用 3rd 方软件时如何知道哪个函数在哪个 .lib 文件中?

示例: 我最近在使用具有大量 .lib 文件的 Qt。在尝试了那些名字最明显的名字之后,我不得不反复试验,直到找到正确的名字。我以为这些信息会在 Qt 的文档中,但没有找到。我仍然是一个自学的初学者,所以有时像这样简单的事情会让我错过。

【问题讨论】:

你可以在 *.lib 文件中搜索函数名 【参考方案1】:

有两种基本方法。

第一种选择是阅读第三方库的文档(微软在这方面非常擅长——它们在每个函数中都包含了你需要的库和头文件。看起来 Qt 不太好。)

第二个选项是使用 DUMPBIN 列出每个库中的名称,如 here 所述。

如 cmets 中所述,第二个选项的变体是 grep .lib 文件以获取函数名称的纯文本。这将告诉您哪些 .lib 文件定义或调用该函数。如果只有一个,你就完成了;如果不止一个,则必须对所有返回的文件运行 DUMPBIN 以查看是哪个文件定义了它。

【讨论】:

是的,当然我们可以为每个somelib.lib 运行link.exe -dump /EXPORTS "somelib.lib" > somelib.log,但是如果我们有很多库怎么办?每个人都这样做?以纯文本形式包含在 lib 文件中的函数名称(可能被装饰 - 开头和结尾的额外符号,但根原样。如此快速和简单的方法 - 只需搜索文件,联系 somefunc 名称(区分大小写) 是的,对每个库都这样做。我对在二进制代码中搜索文本感到紧张。 (是的,是的,我知道它有效——只是我觉得它不干净。)还要注意,如果 .lib calls 函数,而不是 defines 它。 我们需要按原样搜索纯文本(函数名称)。通常所有lib都放在同一个文件夹中。所以搜索所有带有文本myfunction 的 *.lib 文件 - 工作非常快速和容易。如果将超过 1 个结果(很少) - 已经可以更详细地查找已建立的库

以上是关于你如何找到哪个 .lib 文件与哪个函数一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到具有特定依赖关系的 NPM 模块版本 - 例如,哪个版本的 webpack-cli 与 webpack@4.46.0 一起使用?

你如何找到你的 linux 机器上安装了哪个版本的 libstdc++ 库?

ShellExecute()函数包含在哪个lib库中?

VS2017无法解析的外部符号如何解决

如何手动确定哪个链接器与给定的 libc 文件和给定的二进制文件一起使用?

如何使用 Tkinter 和函数找到选择了哪个检查按钮?