这个问题肯定在某处得到了回答,但我找不到了。我已经写了十多年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
文件转换为其他应用程序可用的文件,以及如何从我的代码中访问它?
答案 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吗?