2013-09-11 47 views
1

所以我一直在尝试了几天,现在建libarchive,本指南和许多其他线程如下:https://github.com/libarchive/libarchive/wiki/BuildInstructionsCMake-建设的难点静态库

我想LZMA,zlib的和bzip2支持静态库。我也有这些静态版本(库的)

我只是不能让它正常工作。我曾使用CMAKE为VS2010和NMAKE生成make文件。有了这两个选项,事情编译得很好,但是当我尝试使用生成的archive_static.lib时,在我的项目中,我得到了大量未解决的外部事件。编译.dll版本的库工作时没有未解决的外部问题,但它开始要求zlib.dll,bzip2.dll等,我没有和不想使用。

我想我需要用cmake设置一些标志,但我不知道该怎么做。

任何帮助,非常感谢。 http://www.libarchive.org/

+0

所以我认为问题是,archive_static.lib是静态链接是的,但由于某些原因zlib,lzma和bzip2 arent。如果是这种情况,我怎么能强制这个呢?是否合理,archive_static.lib编译为与其他3动态链接,即使我没有可用的DLL ... – ollo

回答

1

我不确定这是否发生在这里,但请记住,当将二进制文件链接到静态库时,其外部依赖关系不一定会嵌入到其中,这意味着您可能需要提供你的程序通过libarchive间接依赖的静态库,即LZMA,zlib和bzip2。

此外,当涉及到链接静态与动态时,在窗口上存在一些混淆,因为在这两种情况下,您都提供了一个.lib文件,因此很容易混合起来并提供动态链接的.lib,而不是静态版本。如果你这样做了,链接器可能会拒绝链接你的程序(特别是在boost)的情况下,或者可能链接正常,然后在执行时,操作系统将需要相应的.dll文件。

+0

_when将二进制文件链接到静态库时,它的外部依赖不必嵌入到它_这。如果你在整个构建中使用CMake,它实际上会为你解决这个问题(即,通过'target_link_libraries'赋予静态库的依赖将传播到链接到该库的所有可执行文件)。 – ComicSansMS

+1

@ComicSansMS肯定,但据我了解,OP不会在他使用它的同一个cmake项目中编译libarchive,所以不幸的是,观察不适用 – brunocodutra

+0

如果单独编译的库导出CMake包配置文件,它也可以工作。但由于libarchive也不这样做,你的反对意见仍然存在。 – ComicSansMS