如何使用visual studio 2010编写静态ansi-c库

当我在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 。 然后揭示公共符号。

尝试省略__declspec(dllexport) ,这只能用于DLLs 。 如果您编译文件就像

 #ifndef __STACKOVERFLOW_EXAMPLE_ #define __STACKOVERFLOW_EXAMPLE_ int test(int magic); #endif // __STACKOVERFLOW_EXAMPLE_ 

一切都应该没问题。 请看这里的例子。

甚至不知道你用什么样的选项来编译它,甚至很难尝试给出答案。

但是,无论你在尝试什么,VS提供的C语言支持都很差,一些function或版本的C语言在VS内部根本不可用,VS众所周知不是C的真正好地方。

我建议切换到MinGW并坚持下去。

在2013年,使用Visual Studio 2010,我创建了非空的静态库,但是dumpbin和lib都没有产生任何输出,无论我说/ all,-all还是/ disasm,其中一个应该说些什么。

文件在Windows和Linux上说“current ar archive”,$ ar tvf MathFuncsLib.lib rw-rw-rw- 100666/100666 16252 Jan 13 15:29 2014 Debug / MathFuncsLib.obj

是的,这是微软用于他们的演练示例的简单数学库(:-))