当我在 VS2010 中编写和编译一个 lib 文件时,我遗漏了一些东西。我不知何故没有正确标记它们以供出口。
控制台命令dumpbin.exe -headers mylib.lib > stackoverflow.txt
生成以下输出。(我删除了空行)
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01 Copyright (C)
Microsoft Corporation. All rights reserved.
Dump of file mylib.lib
File Type: LIBRARY
ANON OBJECT HEADER VALUES
1 version
14C machine (x86)
515AC7B8 time date stamp Tue Apr 02 13:57:44 2013
ClassID: {0CB3FE38-D9A5-4DAB-AC9B-D6B6222653C2}
171A size
0 flags
我创建了一个新的空项目。新项目是一个没有预编译头文件的空静态库项目。我将它命名为 mylib。之后我创建了两个文件。c 文件以 .c 结尾 - 这将其标记为 ansi-c 文件,编译器会将其编译为 ansi-c。
mylib.h
#ifndef __STACKOVERFLOW_EXAMPLE_
#define __STACKOVERFLOW_EXAMPLE_
__declspec(dllexport) int test(int magic);
#endif // __STACKOVERFLOW_EXAMPLE_
mylib.c
#include "mylib.h"
int test(int magic){
return magic * 7;
}
这里可能出了什么问题?为什么我的 lib 文件不包含符号?
编辑1:
放弃__declspec(dllexport)
似乎是合理的。
mylib.h
#ifndef __STACKOVERFLOW_EXAMPLE_
#define __STACKOVERFLOW_EXAMPLE_
int test(int magic);
#endif // __STACKOVERFLOW_EXAMPLE_
我现在尝试了这个,但不幸的是它并没有改变结果。lib文件中仍然没有符号。
编辑2:
谜题的第二部分是我的控制台命令来显示符号。正确的命令是dumpbin.exe -all mylib.lib > stackoverflow.txt
。之后,公共符号被揭示。