c++ 使用zlib编译boost

xoefb8l8  于 2023-03-09  发布在  其他
关注(0)|答案(8)|浏览(327)

我正在Windows 7下编译bjam boost(64位-应该是无关紧要的)

D:\development\boost\boost_1_44\libs\iostreams\build>bjam stage ^
--toolset=msvc-10.0 link=static ^
--build-type=complete ^
-s ZLIB_SOURCE=C:\zlib125-dll ^
-s ZLIB_LIBPATH=C:\zlib125-dll\lib ^
-s ZLIB_INCLUDE=C:\zlib125-dll\include ^
-s ZLIB_BINARY=C:\zlib125-dll

但我只得到

stage/libboost_iostreams-vc100-mt-gd-1_44.lib
bin.v2/libs/iostreams/build/msvc-10.0/debug/threading-multi/boost_iostreams-vc100-mt-gd-1_44.dll
bin.v2/libs/iostreams/build/msvc-10.0/debug/threading-multi/boost_iostreams-vc100-mt-gd-1_44.lib

bin.v2/libs/iostreams/build/zlib/msvc-10.0/debug/threading-multi/boost_zlib-vc100-mt-gd-1_44.dll
bin.v2/libs/iostreams/build/zlib/msvc-10.0/debug/threading-multi/boost_zlib-vc100-mt-gd-1_44.lib

但是缺少stage/libboost_zlib-vc100-mt-gd-1_44.lib
我是不是编错了什么?
当我尝试运行我的项目时,它与boost和自编译的boost/thread库一起工作得很好,当我包含boost zlib内容时,我得到了以下错误

6>LINK : fatal error LNK1104: cannot open file 'libboost_zlib-vc100-mt-gd-1_44.lib'

有人知道我哪里做错了吗?

dbf7pr2w

dbf7pr2w1#

我确实设法使用选项构建了它们
-sZLIB文件源代码=“C:\zlib-1.2.5”
请注意,-s和路径两边的引号后面没有空格。

z3yyvxxp

z3yyvxxp2#

我花了一段时间才让Boost在zlib支持下正确构建。
我遇到的问题是zlib在某个时候不再包含gzio.c源文件,Boost构建系统的jamfile(jamfile.v2)引用了gzio模块,这导致了它的失败,解决方法是在构建之前删除该引用。
我不确定这个答案是否适用,除非你尝试构建一个旧版本的Boost,我相信最初的构建问题已经在Boost的最新版本中得到了修复。

sq1bmfud

sq1bmfud3#

我遇到了同样的问题(Windows 7 Visual Studio),我相信问题不在于如何构建Boost。
1)作为ecotax,-s后面不应该有空格2)当运行bjam时,添加标记--debug-configuration.如果在输出中你没有看到错误,它会打印出如下内容
注意:iostreams:使用预建的zlib
那么它已经找到了你的zlib副本,这很好。
3)请注意,不应生成库libboost_zlib-vc 100-mt-gd-1_44.lib。
4)在Visual Studio中编译应用程序时,Boost.Iostreams自动链接似乎仍需要libboost_zlib-vc 100-mt-gd-1_44.lib并报告链接错误。
对我(我创立了Googling)来说,它的作用是在预处理器定义中添加flag
增压_流_无_库

mm5n2pyu

mm5n2pyu4#

我尝试了各种各样的方法,很难找到新版本Boost(1.75.0)的正确解决方案。
所有-sZLIB_xxx开关似乎都不再工作。
Boost Documentation仅声明
在Windows上,zlib、bzip 2、zstd和/或LZMA二进制文件需要在PATH中,否则默认情况下通常找不到它们,因此在Windows下,在您自己的jamfile中设置zlib、bzip 2、zstd和/或LZMA工具集总是一个好主意。
设置路径并没有带来任何成功,所以我挖掘了更多的文档。Boost提供的jam文档和示例并不是最有帮助的,所以通过分析柯南boost包的Conan Recipe,我终于找到了这个最小的user-config.jam文件,它对我来说很有用:

using zlib : your.zlib.version :
  <include>"path/to/zlib/include/headers"
  <search>"path/to/zlib/library/file" ;

为我执行此操作的最小b2命令为:

.\b2.exe --user-config="path/to/user-config.jam"

希望这能对其他人有所帮助,这样他们就不需要像我一样浪费很多时间了。

r7xajy2e

r7xajy2e5#

对于那些使用预建的'zlib'进行编译的人来说,需要完成以下步骤:

  • 下载并构建“zlib”
  • 运行b2.exe --带有iostreams-s ZLIB_BINARY=zlib -s ZLIB_INCLUDE=C:/系统/zlib-1.2.7/包含-s ZLIB_LIBPATH=C:/系统/zlib-1.2.7/库版本

更新本地安装zlib文件夹的路径。这样,Boost将gzip.cpp、zlib.cpp文件嵌入libboost_iostreams。不会生成libboost_zlib。

  • 在源文件中添加以下代码行(在stdafx. h中的某个位置,在包含Boost.Iostream头之前):

--

#ifdef _DEBUG
  #define BOOST_ZLIB_BINARY zlibd
#else
  #define BOOST_ZLIB_BINARY zlib
#endif

这表明您不想链接libboost_zlib,而是提供预编译的zlib库。

  • 在项目设置中提供zlib.lib文件的路径.
  • 它现在应该编译和链接了。
ndh0cuux

ndh0cuux6#

我从其他答案中综合了一些建议,我这样做了:
将zlib解压缩到C:\zlib\zlib-1.2.11中。
使用CMake来配置和生成MS Visual Studio 2017项目,并使用MS Visual Studio 2017来构建项目。我在适当的位置构建了它,以便C:\zlib\zlib-1.2.11现在包含(除了以前的内容)目录lib和include。
将Boost 1.67.0解压缩到C:\Boost\boost_1_67_0。
(Be在驱动器C上:)

cd \Boost\boost_1_67_0
bootstrap.bat
set ZLIB_SOURCE="C:\zlib\zlib-1.2.11"
set ZLIB_INCLUDE="C:\zlib\zlib-1.2.11\include"
set ZLIB_LIBPATH="C:\zlib\zlib-1.2.11\lib"

下面的代码行构建了libboost_iostreams,并将libboost_zlib文件放入C:\Boost\boost_1_67_0\stage\lib中:

b2 --debug-configuration --with-iostreams -sZLIB_SOURCE="C:\zlib\zlib-1.2.11" -sZLIB_INCLUDE="C:\zlib\zlib-1.2.11\include" -sZLIB_LIBPATH="C:\zlib\zlib-1.2.11\lib"

下面的代码行构建了Boost的其余部分:

b2 -sZLIB_SOURCE="C:\zlib\zlib-1.2.11" -sZLIB_INCLUDE="C:\zlib\zlib-1.2.11\include" -sZLIB_LIBPATH="C:\zlib\zlib-1.2.11\lib"

不知道这是否是最佳的方法,但它确实构建了libboost_zlib文件。

g0czyy6m

g0czyy6m7#

1.使用Cmake构建Zlib,但在适当位置构建(不在build文件夹中),即在Cmake-

where is the source code - C:\zlib\zlib-1.2.13
 where to build the binaries - C:\zlib\zlib-1.2.13

1.更改Bootstrap.bat文件

set ZLIB_SOURCE="C:\zlib\zlib-1.2.13"
set ZLIB_INCLUDE="C:\zlib\zlib-1.2.13"
set ZLIB_LIBPATH="C:\zlib\zlib-1.2.13"

1.要使用iostreams构建Boost,请运行以下命令-
b2 --带有iostreams-sZLIB源代码=“C:\zlib\zlib-1.2.13”-sZLIB包含代码=“C:\zlib\zlib-1.2.13”-sZLIB库路径=“C:\zlib\zlib-1.2.13”
1.要构建Boost库的其余部分,请运行-
b2

6tr1vspr

6tr1vspr8#

set ZLIB_SOURCE="c:\zlib"
set ZLIB_INCLUDE="c:\zlib"
.\b2
.\bjam将不生成库,但.\b2将生成库:s tage/libboost_zlib-vc100-mt-gd-1_44.lib

相关问题