我正在使用Windows 7下的bjam编译提升(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'
有谁知道我做错了什么?
答案 0 :(得分:15)
我确实设法使用选项
来构建它们
-sZLIB_SOURCE =“C:\ zlib-1.2.5”
请注意,-s和路径周围的引号后面没有空格。
答案 1 :(得分:5)
我需要一段时间才能使用zlib支持正确构建Boost。我在博客上发表了here。
总结一下,我遇到的问题是,在某些时候zlib不再包含gzio.c
源文件。 Boost构建系统的jamfile(jamfile.v2)引用了gzio模块导致它失败。解决方案是在构建之前删除该引用。
我不确定这个答案是否相关,除非您尝试构建旧版本的Boost。我相信原始构建问题已在更新版本的Boost中得到修复。
答案 2 :(得分:3)
我遇到了同样的问题(Windows 7 Visual Studio),我认为问题不在于如何构建提升。
1)作为ecotax,-s之后不应该有空格 2)运行bjam时,添加标志--debug-configuration。如果在输出中你没有看到错误,它会输出类似
的内容注意:iostreams:使用预建的zlib
然后它找到了你的zlib副本,这很好。
3)请注意,不应生成库libboost_zlib-vc100-mt-gd-1_44.lib。
4)在Visual Studio中编译应用程序时,似乎Boost.Iostreams自动链接仍然需要libboost_zlib-vc100-mt-gd-1_44.lib并报告链接错误。
它对我有用(我创建谷歌搜索)是为预处理器定义添加标志
BOOST_IOSTREAMS_NO_LIB
答案 3 :(得分:1)
对于那些正在编译的人,使用预先构建的' zlib'。 这些步骤需要完成:
更新本地安装zlib文件夹的路径。这样,Boost将嵌入libboost_iostreams的gzip.cpp,zlib.cpp文件。不会生成libboost_zlib。
-
#ifdef _DEBUG
#define BOOST_ZLIB_BINARY zlibd
#else
#define BOOST_ZLIB_BINARY zlib
#endif
这告诉您不想链接libboost_zlib,但是您提供了预编译的zlib库。
答案 4 :(得分:1)
我在这里结合了其他答案的建议,这就是我所做的:
将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。
(位于驱动器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 lib文件。
答案 5 :(得分:0)
我尝试了各种方法,但很难为较新版本的 boost (1.75.0) 找到正确的解决方案。
所有 -sZLIB_xxx 开关似乎不再起作用。
Boost Documentation 只是声明
<块引用>在 Windows 上,zlib、bzip2、zstd 和/或 LZMA 二进制文件需要在 PATH 中,否则默认情况下通常不会找到它们,因此在 Windows 下设置 zlib、bzip2、zstd 总是一个好主意和/或您自己的 jamfile 中的 LZMA 工具集。
设置路径并没有带来任何成功,所以我挖掘了更多文档。 Boost 提供的 jam 文档和示例并不是最有用的,因此通过对 Conan 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"
希望这能对其他人有所帮助,以免他们像我一样浪费很多时间。
答案 6 :(得分:-1)
set ZLIB_SOURCE="c:\zlib"
set ZLIB_INCLUDE="c:\zlib"
.\b2
.\bjam
将无法构建,但.\b2
将构建库:s tage/libboost_zlib-vc100-mt-gd-1_44.lib