mingw&vc静态库lib

网上大多说的是 dll 怎么生成 .lib 什么的,这里是将mingw生成的.a文件拉出符号表文件.lib。

先用 ar 将 .a 中的所有 .o 文件解出来:

ar x libatlas.a  


使用 MinGW 的 --export-all-symbols 选项,链接成 dll ,并导出所有符号:

gcc -shared -o atlas.dll *.o -Wl,--export-all-symbols,--output-def,atlas.def  


使用 VC++ 自带的 lib 命令制作 .lib(需要上一步的 .def 文件):

lib /machine:i386 /def:atlas.def


另外如何将mingw生成的静态库.a转换成msvc能用的静态库而非仅仅是提供索引功能的.lib文件呢?

看到大神的帖子http://blog.csdn.net/weekly123/article/details/5640656:

"至于静态库.lib和.a之间的转换。据说这是同一种类型的归档文件,不同的只是归档里包含的内容。lib里包含的是.obj文件,a里包含的是.o文件。然而,这两种文件的格式据说也是相同的,然而我们发现lib和a无法通用!(请注意,这里的静态库lib不是调用dll时的那种静态库lib。那种lib只是起到索引和连接dll的功能,而这里所说的静态库是脱离dll工作的库,函数过程都包含在库里了)。以前我曾经写过一篇文章,讨论过cygwin上的库和mingw通用的方法。其实现在我们可以更清晰的明白,他们之所以通用是因为两者都是用gcc编译的。同一种编译器出来的结果当然可以兼容。那篇文章的价值在于。cygwin虽然工具包很多,但是要独立运行还需要dll支持。而mingw则可以生成不依赖于dll独立运行的程序。

那么lib和a不能通用的原因到底在哪里呢?起初觉得有可能在编译器上。因为vc的编译器cl和gcc的编译器编译出来的obj和o文件虽然格式相同却不能通用。实验表明,拿o文件给cl用,或拿obj给gcc用都通不过。然而,我对这点还不表示怀疑!因为我觉得最可能的原因并不在这里。行不通的原因很可能是两个编译器调用了不同的库函数。cl调用了MSVC提供的库函数,而gcc调用了他自己的库函数。所以我们回发现,通用静态库失败时显示的都是库函数没定义之类的错误。其实是函数名的符号不能识别。如果知道所需的库函数的具体文件,并加入到项目的编译中,相信很可能就会解决问题。不论如何,目前静态库的通用方法还有待进一步的探讨。

"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值