我正在评估一些文档不足的软件。当我构建示例项目时,我收到一个链接器错误,如下所示:
error LNK2019: unresolved external symbol
这个应用程序没有大量的 lib 文件,因此我可以通过反复试验来解决这个问题,但我知道有一种更优雅的方法来解决这个问题。
在java世界里,我会grep FOO *.jar找到 jar,我正在寻找 C++ 类似物。我正在 Visual Studio 2005 中处理 C++ 代码。
我怀疑带有 /LIST 选项的 lib.exe 实用程序可以获取该信息,但到目前为止我还没有成功。它只是打印这个:
Microsoft (R) Library Manager Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.
granite50.dll
granite50.dll
granite50.dll
granite50.dll
...
有什么建议么?
首先,您需要知道您正在查看哪种类型的库。有些库仅包含 DLL 的链接(即导入库),而其他库则是成为可执行映像一部分的代码对象(即静态库)。从该输出的外观来看,您正在查看一个 DLL 导入库。
接下来你要使用正确的工具。 Lib.exe 用于从库等中提取目标文件。这与 Java 的 jar 实用程序几乎相同。 Microsoft 提供了 dumpbin.exe,它将从库中转储信息。我看到LarryF https://stackoverflow.com/questions/488809/tools-for-inspecting-lib-files#488823已经提到过这一点。
对于导入库,运行dumpbin.exe -headers foo.lib
并将其重定向到输出文件。输出将包含相关 DLL 导出的每个符号的片段。搜索以以下内容开头的行" Symbol name :"
。请注意,如果您想要精确匹配,“交易品种名称”前后有两个空格。您还可以通过运行输出findstr
生成符号列表并将其重定向到文本文件(如果您想要更好看的东西):
dumpbin.exe -headers foo.lib | findstr /c:" Symbol name :" > foo-exports.txt
另一种选择是使用以下命令打开相关的 DLLdepends.exe
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)