【问题标题】:How to find which functions are in a static c/c++ library in Visual Studio如何在 Visual Studio 的静态 c/c++ 库中查找哪些函数
【发布时间】:2014-09-22 18:19:28
【问题描述】:

我有一个应用程序和一个静态库。该库似乎构建得很好 - 它当然可以很好地编译我的 foobargeewhizz 函数,并创建静态库而没有任何错误或警告。

但是,当应用程序构建并链接到静态库时,它设法链接到函数foobar,但找不到函数geewhizz。如何判断geewhizz 是否进入图书馆?我看不到任何/map 库选项,例如用于构建应用程序的库。而且在构建应用的时候使用\map选项是没有意义的,因为它找不到我的geewhizz函数,也没有依据报告。

我正在使用 C 和 C++ 的混合体,我怀疑可能存在导致问题的函数名称修改/翻译问题或调用约定问题,所以我认为有一个函数列表包含在图书馆应该能够阐明这一点。但如果有解决此类问题的更一般性建议,我很乐意听到。

【问题讨论】:

  • 所以你得到一个链接错误,对吧?
  • @MarcoA.:仅当将可执行文件链接到共享库时。他想知道他的共享库是否有效他尝试使用它之前。
  • @MarcoA:不再是 - 我已经通过在 extern "C" {...} 构造中声明 geewhizz 来修复我的链接错误。但我仍然很想知道如何在静态库中获取函数列表,因为这有助于更快地证实我的怀疑。静态库始终有效
  • 你可以试试dumpbin.exe:stackoverflow.com/questions/375273/…。我不知道它是否适用于静态库,但我不明白为什么它不会。
  • @WhozCraig - 鉴于上述情况,也许您应该将另一个答案标记为这个答案的副本;-) 我认为有人应该拼出 dumpbin /linkermember 语法并获得一些免费代表感恩的人对问题和答案都投赞成票

标签: c++ c visual-studio static-libraries


【解决方案1】:

特别感谢@indiv 和@WhozCraig 提供的帮助,您至少有以下两个选择:

  • 在 Visual Studio 的链接器程序 (lib.exe) 中使用 /LIST 选项
  • dumpbin 实用程序与/linkermember 选项结合使用

Visual Studio 在使/LIST 选项易于使用方面并不完全有帮助。您必须将其指定为命令行上的附加选项,但如何做到这一点尚不清楚。 /LIST 自己会生成标准输出列表,但指定文件或使用 > 重定向运算符都不会以任何明显的方式工作。事实上,我已经完全放弃了尝试如何使这个选项起作用。

谢天谢地,dumpbin 是 Visual Studio(甚至是 Express 版本)附带的实用程序,并且有很好的文档记录 here。因此,在有人让/LIST 对普通人远程工作之前,请使用dumpbin

【讨论】:

    猜你喜欢
    • 2021-01-30
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2013-01-09
    • 2011-02-20
    • 2013-01-22
    相关资源
    最近更新 更多