首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用visual studio 2010编写静态ansi-c库?

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

Stack Overflow用户
提问于 2013-04-02 13:25:03
回答 3查看 2.5K关注 0票数 3

当我用VS2010编写和编译库文件时,我遗漏了一些东西。我不知怎么没把它们标上正确的出口标记。

控制台命令dumpbin.exe -headers mylib.lib > stackoverflow.txt生成以下输出。(我删除了空行)

代码语言:javascript
复制
 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

代码语言:javascript
复制
#ifndef __STACKOVERFLOW_EXAMPLE_
#define __STACKOVERFLOW_EXAMPLE_

__declspec(dllexport) int test(int magic);

#endif // __STACKOVERFLOW_EXAMPLE_

mylib.c

代码语言:javascript
复制
#include "mylib.h"

int test(int magic){
    return magic * 7;
}

这里怎么可能出问题了?为什么我的lib文件不包含符号?

编辑1:

放弃__declspec(dllexport)似乎是理性的。

mylib.h

代码语言:javascript
复制
#ifndef __STACKOVERFLOW_EXAMPLE_
#define __STACKOVERFLOW_EXAMPLE_

int test(int magic);

#endif // __STACKOVERFLOW_EXAMPLE_

我现在试过了,但不幸的是,它并没有改变结果。库文件中仍然没有符号。

编辑2:

拼图的第二部分是我的控制台命令,用来显示符号。正确的命令是dumpbin.exe -all mylib.lib > stackoverflow.txt。之后,这些公共符号就被揭露了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-02 13:29:58

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

代码语言:javascript
复制
#ifndef __STACKOVERFLOW_EXAMPLE_
#define __STACKOVERFLOW_EXAMPLE_

int test(int magic);

#endif // __STACKOVERFLOW_EXAMPLE_

一切都会好起来的。有关示例,请参见这里

票数 3
EN

Stack Overflow用户

发布于 2013-04-02 13:28:51

甚至不知道您曾经编译过的选项是什么,甚至很难给出答案。

但是,不管您在尝试什么,VS对C语言的支持都很差,有些特性或C语言的版本在VS中根本无法使用,VS对于C语言来说并不是一个很好的地方。

我建议改用MinGW并坚持使用它。

票数 0
EN

Stack Overflow用户

发布于 2014-01-14 17:22:55

2013年,在Visual 2010中,我创建了非空的静态库,但无论是/all、-all还是/disasm,无论是dumpbin还是lib都不会产生任何输出,其中之一应该有所说明。

文件上写着“当前的ar存档”,在Windows和linux上,$ ar MathFuncsLib.lib rw- 100666/100666 1月13日15:29 2014年调试/MathFuncsLib.obj

是的,这是微软在浏览示例(:-)时使用的简单的数学库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15765321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档