【问题标题】:List functions in *.lib on Windows在 Windows 上列出 *.lib 中的函数
【发布时间】:2015-10-03 07:20:56
【问题描述】:

当我运行lib /list mylib.lib 时,我看到了一些包含的 .obj 文件,但没有关于类似于此的函数的信息:

Path\file1.obj
Path\file2.obj
Path\file3.obj

如果我将 .lib 文件作为档案打开,我可以看到除了目标文件之外还有许多文件 1.txt, ..., n.txt。这些 txt 文件似乎包含有关 .obj 文件中函数的信息,格式如下:

:
Path\file1.obj    ?function_name@...
:

因此可以通过这种方式检索一些信息。

但是没有更好的方法来获取函数信息吗?例如使用lib.exedumpbin.exe 或其他工具?还采用更易读/更清晰的格式?到目前为止,我还没有找到它。

有一个相关的问题here,但它没有讨论如何处理 .lib 文件中包含的目标文件。

【问题讨论】:

标签: c++ windows static-libraries


【解决方案1】:

您需要使用dumpbin。 (有关更多信息,请参阅dumpbin on msdn。)

dumpbin /symbols /exports mylib.lib

您也可以使用dumpbin,后跟undname。 (见undname。)例如:

dumpbin /all /exports mylib.lib > mylib.txt
undname mylib.txt

当然,您需要从 Visual Studio 工具所在路径中的命令提示符执行此操作。我的安装 dumpbin 和 undname 位于:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\dumpbin.EXE
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\undname.EXE

程序菜单中提供了 Visual Studio 命令提示符。但我只需调用即可获得一个

"%VS120COMNTOOLS%..\..\vc\vcvarsall" amd64

【讨论】:

  • dumpbin /symbols /exports 的唯一输出是 File Type: LIBRARY。我链接到的问题中提到了这一点,但对我没有帮助。
  • 这个库是 dll 的吗?如果是这样,那么您将仅针对您明确导出的内容导出符号。我通常使用__declspec(dllexport) 来执行此操作。在"%VS120COMNTOOLS%\..\..\vc\lib 中尝试在 MS 提供的 msvcrt.lib 上使用 dumpbin
【解决方案2】:

GNU nm 做你想做的事,只要你不使用 /LTCG 编译,它也应该与 MSVC 对象一起工作。

$ nm ssleay32MT.lib 
tmp32/tls_srp.obj:
[...]
00000000 R ??_C@_0BA@IKHGPLLJ@?4?2ssl?2tls_srp?4c?$AA@
         U @__security_check_cookie@4
00e0797d a @comp.id
80000191 a @feat.00
         U ___security_cookie
         U __chkstk
         U _BN_bin2bn
         U _BN_bn2bin
         U _BN_clear_free
         U _BN_copy
         U _BN_dup
         U _BN_free
         U _BN_num_bits
         U _BN_ucmp
         U _BUF_strdup
         U _CRYPTO_free
         U _CRYPTO_malloc
         U _ERR_put_error
         U _OPENSSL_cleanse
         U _RAND_bytes
         U _SRP_Calc_A
00000000 T _SRP_Calc_A_param
         U _SRP_Calc_B
         U _SRP_Calc_client_key
         U _SRP_Calc_server_key
         U _SRP_Calc_u
         U _SRP_Calc_x
         U _SRP_check_known_gN_param
         U _SRP_create_verifier_BN
00000000 T _SRP_generate_client_master_secret
00000000 T _SRP_generate_server_master_secret
[...]

【讨论】:

  • 在文件上运行 nm 时,我会列出包含的目标文件,然后是 : File format not recognized
  • @Zitrax:您是否禁用了 LTCG(链接时间代码生成)?
  • 无论该选项如何,我都会得到相同的输出。
  • @Zitrax:它对我有用,请参阅我的更新答案。确保您的 nm 是为 x86_64 目标构建的。
  • 嗯,我确实有 32 位版本,但经过一番查找,我找不到预构建的 64 位 nm 二进制文件。
猜你喜欢
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多