将.a文件转换为.dll文件

时间:2011-10-21 15:14:40

标签: c++ c windows unix tar

这个问题肯定在某处得到了回答,但我找不到了。我已经写了十多年Java了,我的C经验是在Unix上,所以我在这里的方方面面。在我的Unix体验中,其他人编写了makefile,它只是起作用。

我已从feep下载了libtar-1.2.11的C源代码,并从cygwin内部运行make。这创建了一个.a文件和一个.exe文件。 EXE文件似乎基本上是在Windows上运行的tar,但我想要的是库在我自己的代码中读取和处理文件。

如果我没记错的话,那些应该在.a文件(archive ??)中,这需要链接到我可以在我的C ++程序中使用的库中。所以我正在寻找一种方法。

我正在编写一个使用.tgz文件的库,所以我想使用这个库。我想我想把libtar变成一个DLL,并自己创建一个DLL用于其他语言。

那么,如何将我的.a文件转换为其他应用程序可用的文件,以及如何从我的代码中访问它?

2 个答案:

答案 0 :(得分:4)

生成的libmylib.a实际上是*.o的所有libtar-1.2.11的归档。
您可以通过执行nm libmylib.a来验证这一点,它会打印所有*.o个文件 编写代码,并链接:

gcc -o my_application my_application.o -lmylib

你用cygwin生成了这个,据我所知你不能生成一个dll。

答案 1 :(得分:3)

嗯,一个DLL相当于Unix中的共享库(.a是一个静态链接库,Windows等价物是.LIB文件),所以你想建立一个共享库。

确实,当你构建为

make LDFLAGS=-shared

生成的libtar/libtar.exe实际上是一个名不副实的DLL。

但请注意,cygwin翻译的DLL与本机Windows DLL不同,并且始终依赖于Cygwin DLL(甚至可能是已安装的Cygwin环境)来运行,因此如果您计划将其包含在本机Windows中代码,这可能不是你想要追求的方法。

我可以建议您从大量死亡(2003年最后一个版本)libtar切换到libarchive,它带有原生Windows build instructions吗?