我从mingw创建了一个.A
和一个相应的.dll
文件。这将在Windows上运行。现在我尝试从不同的组件接口和使用.A库中的函数,我收到链接器错误。我想确保我的功能是否正确导出。因此,我按照this链接决定这样做
> lib.exe /list libSomeLibrary.a
因此我得到了类似的东西
d001861.o
d001862.o
d001863.o
d001864.o
d001865.o
d001866.o
d001867.o
d001868.o
d001869.o
d001870.o
d001871.o
d001872.o
d001873.o
d001874.o
d001875.o
d001876.o
d001877.o
d001878.o
d001879.o
d001880.o
d001881.o
d001882.o
d001883.o
....
....
这是对的吗?有没有办法让我真正获得lib文件中的函数名称。
答案 0 :(得分:1)
由于您使用的是MinGW,因此可以使用nm
命令列出任何libfoo.a
存档文件的内容;因此使用:
nm -A libfoo.a | more
(或者更好的是,如果你有less
命令,例如在MinGW的MSYS shell环境中):
nm -A libfoo.a | less
它将列出归档中指定的所有符号,按照提供每个符号的嵌入式目标文件的名称进行分组和限定。
答案 1 :(得分:0)
.a
库文件包含许多单独的目标文件,这些文件组合在一起成为库存档。它是实际包含符号和代码的单个.o
目标文件。
您应该能够使用dumpbin工具检查Windows系统上的库。 /exports
选项应显示导出的符号。我对此工具没有任何经验,但上面的页面暗示它应该能够直接在windows lib文件上运行。
您声明您正在使用GNU Binutils附带的MingW,包括nm和objdump,两者都可用于检查目标文件。要使用这些工具,您可能会发现从.a文件中提取.o文件更方便,您可以使用ar命令执行此操作。如果不这样做,它将列出归档中所有目标文件中的所有信息。
示例(在Linux系统上显示,但如果使用MingW,这些工具在Windows中的工作方式相同):
从libbfd.a中提取corefile.o
$ ar x /usr/lib64/libbfd.a corefile.o
检查corefile.o中的全局(外部)符号
$ nm -g corefile.o
0000000000000000 T bfd_core_file_failing_command
0000000000000030 T bfd_core_file_failing_signal
0000000000000060 T bfd_core_file_pid
U bfd_set_error
0000000000000090 T core_file_matches_executable_p
U filename_cmp
00000000000000d0 T generic_core_file_matches_executable_p
U _GLOBAL_OFFSET_TABLE_
U strrchr