首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MinGW静态链接到Windows上的libarchive

用MinGW静态链接到Windows上的libarchive
EN

Stack Overflow用户
提问于 2012-07-26 10:29:39
回答 1查看 3.1K关注 0票数 7

我在我的项目中使用libarchive已经有一段时间了,它工作得很好,现在我正在动态地链接到它,所以在libarchive.dll上libarchive.dll文件必须显示在系统上。现在我想静态地链接到库,这样我就不用麻烦地分发DLL了,但是我真的很难做到这一点!

目前,在我的make文件中,我有这样的东西:-Lpath/to//libarchive/ -larchive

这是可行的,但是它有一个动态的链接。我不知道如何执行静态链接。

我可以在libarchive目录中看到两个a文件,libarchive.dll.a和libarchive_static.a。我想我想链接到libarchive_static.a,但是我似乎不能指定这一点,在make中执行-larchive_static会导致链接器错误。

我的印象是windows下的静态库是lib文件,但是当我构建libarchive时没有得到这样的文件类型。

如何从libarchive生成.lib文件。另外,作为一个额外的问题,文件和lib文件之间有什么区别?

更新

要静态地链接到libarchive,用于make的库命令应该包含:

-Lpath/to/libarchive/ -larchive_static

这将链接到libarchive_static.a文件。但是,您还需要在代码中定义LIBARCHIVE_STATIC。

现在的问题是libarchive依赖于bzip2库(以及其他库),如果您没有它们的静态构建,您将得到链接器错误,如下所示:

未定义的对`BZ2_bzCompressInit的引用

您需要静态构建依赖库,并在libarchive命令之后使用与链接器类似的命令:

-Lpath/to/bzip2 2/ -lbzip2

您可以从源代码构建bzip2,也可以通过简单的方式从Gnu32Win项目获得预构建的二进制文件:http://gnuwin32.sourceforge.net/packages.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-26 10:40:04

只需将libarchive_static.a显式添加到链接命令中即可。

代码语言:javascript
复制
gcc -o YourApp.exe $(OBJS) path/to/libarchive_static.a $(OtherLibs)

".lib“文件因编译器而异(Borland,Microsoft等),".a”是UNIX的ar工具中的一种旧的“归档”格式。现在,它只用于绑定静态库。

目前,在我的制作文件中,我有一些东西..。这是可行的,但是它做了一个动态链接

.a文件实际上包含一些用于动态链接到.dll文件的代码,而不是libarchive本身。在启动时,分配指向函数的指针,并执行动态链接。

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

https://stackoverflow.com/questions/11667387

复制
相关文章

相似问题

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