我正在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'
有人知道我哪里做错了吗?
8条答案
按热度按时间dbf7pr2w1#
我确实设法使用选项构建了它们
-sZLIB文件源代码=“C:\zlib-1.2.5”
请注意,-s和路径两边的引号后面没有空格。
z3yyvxxp2#
我花了一段时间才让Boost在zlib支持下正确构建。
我遇到的问题是zlib在某个时候不再包含
gzio.c
源文件,Boost构建系统的jamfile(jamfile.v2)引用了gzio模块,这导致了它的失败,解决方法是在构建之前删除该引用。我不确定这个答案是否适用,除非你尝试构建一个旧版本的Boost,我相信最初的构建问题已经在Boost的最新版本中得到了修复。
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
增压_流_无_库
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文件,它对我来说很有用:
为我执行此操作的最小b2命令为:
希望这能对其他人有所帮助,这样他们就不需要像我一样浪费很多时间了。
r7xajy2e5#
对于那些使用预建的'zlib'进行编译的人来说,需要完成以下步骤:
更新本地安装zlib文件夹的路径。这样,Boost将gzip.cpp、zlib.cpp文件嵌入libboost_iostreams。不会生成libboost_zlib。
--
这表明您不想链接libboost_zlib,而是提供预编译的zlib库。
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上:)
下面的代码行构建了libboost_iostreams,并将libboost_zlib文件放入C:\Boost\boost_1_67_0\stage\lib中:
下面的代码行构建了Boost的其余部分:
不知道这是否是最佳的方法,但它确实构建了libboost_zlib文件。
g0czyy6m7#
1.使用Cmake构建Zlib,但在适当位置构建(不在build文件夹中),即在Cmake-
1.更改Bootstrap.bat文件
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
6tr1vspr8#
set ZLIB_SOURCE="c:\zlib"
set ZLIB_INCLUDE="c:\zlib"
.\b2
.\bjam
将不生成库,但.\b2
将生成库:stage/libboost_zlib-vc100-mt-gd-1_44.lib