我一直在我的项目中使用libarchive一段时间,它的工作很好,此刻我动态链接到它,所以在Windows上,libarchive.dll文件必须呈现在系统上。 我现在想静态链接到库,所以我不必打扰分发DLL,但我很难实现这一点!使用MinGW静态链接到Windows上的libarchive
目前,我的make文件,我有这样的事情: -Lpath /到// libarchive/-larchive
而这个工作,但它确实一个动态链接。我不知道如何执行静态链接。
我可以在libarchive目录中看到有两个a文件,libarchive.dll.a和libarchive_static.a。我想我想链接到libarchive_static.a,但我似乎无法指定此操作,make文件中的-larchive_static导致链接器错误。
我的印象是windows下的静态库是lib文件,但是当我构建libarchive时,我没有得到这样的文件类型。
如何从libarchive中创建.lib文件。另外,作为一个额外的问题,a文件和lib文件有什么区别?
更新
静态链接到libarchive,为使您的库的命令应包含:
-Lpath /到// libarchive/-larchive_static
这将链接到libarchive_static。一份文件。但是,您还需要在代码中定义LIBARCHIVE_STATIC。
现在的问题是,libarchive取决于bzip2的库(以及其他),如果你没有对他们有静电积累,你会得到链接错误是这样的:
未定义的参考`BZ2_bzCompressInit “
您需要的依赖库和类似的命令到连接的静电积聚后libarchive命令:
-Lpath /到/的bzip2/-lbzip2
您可以从源代码编译的bzip2,或做简单的方法,并从Gnu32Win项目这里预构建的二进制:http://gnuwin32.sourceforge.net/packages.html
感谢您的注释来定义LIBARCHIVE_STATIC。 – 2017-04-28 12:07:39