使用 bzip 提升 iostreams - 未解析的符号

Boost iostreams with bzip - unresolved symbols

提问人:E.K. 提问时间:10/18/2012 最后编辑:CommunityE.K. 更新时间:2/25/2017 访问量:2083

问:

我的项目使用的是旧版本的 Boost 的 iostreams w/ bzip2。我现在正在尝试升级到 Boost 1.51。起初我没有使用 bzip 进行编译,所以很明显我让链接器大喊缺少 libboost_bzip2-vc100-mt-sgd-1_51.lib。然后,我按照这些说明(并添加了静态标志)编译了这个文件。

但是,现在运行链接器会返回一堆缺少的符号:

>error LNK2001: unresolved external symbol "protected: __thiscall boost::iostreams::detail::bzip2_base::~bzip2_base(void)" (??1bzip2_base@detail@iostreams@boost@@IAE@XZ)
>error LNK2001: unresolved external symbol "protected: __thiscall boost::iostreams::detail::bzip2_base::bzip2_base(struct boost::iostreams::bzip2_params const &)" (??0bzip2_base@detail@iostreams@boost@@IAE@ABUbzip2_params@23@@Z)
>error LNK2001: unresolved external symbol "int const boost::iostreams::bzip2::stream_end" (?stream_end@bzip2@iostreams@boost@@3HB)
...

任何想法,为什么库不包含所有这些代码?我错过了什么? 我在 Windows 上使用 VS2010。


编辑:知道了!

有一个旧版本的 libboost_iostreams-vc100-mt-sgd-1_51.lib,它是在没有 bzip 的情况下编译的。我仍然不确定的是:对于我的原始编译,我使用了:

>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 -sZLIB_SOURCE=d:\work\external\zlib-1.2.3 runtime-link=static

这将生成以下文件:

libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib

对于“正确”的编译(解决了问题),我使用了:

>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 runtime-link=static

即简单地删除了 zlib,因为这对我来说是不必要的。它产生了:

libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib
libboost_iostreams-vc100-mt-s-1_51.lib
libboost_iostreams-vc100-mt-sgd-1_51.lib

为什么原始编译中没有生成 iostreams 库?很奇怪。

谢谢。

C++ Boost 未解析的外部 bzip2 boost-iostreams

评论

3赞 Some programmer dude 10/18/2012
与其用解决方案编辑你的问题,不如把它作为一个正确的答案并接受它。
4赞 E.K. 10/18/2012
尝试过,但因为我不久前才注册,显然我没有足够的声誉来回答我自己的问题......
0赞 anatoly techtonik 8/7/2014
@E.K.尝试登录更多的StackOverflow网站以获得声誉提升。
0赞 LThode 12/16/2014
@E.K. 现在尝试自我回答 -- 低重复次数用户对自我回答的限制只是 8 小时的延迟(垃圾邮件控制),而不是永久限制。
0赞 Tomáš Zato 9/21/2015
很高兴这修复了您的错误 - 我有 lib 文件,但我仍然收到错误......libboost_iostreams

答:

1赞 LThode #1

来自 E.K. 的回答:

有一个旧版本的 libboost_iostreams-vc100-mt-sgd-1_51.lib,它是在没有 bzip 的情况下编译的。我仍然不确定的是:对于我的原始编译,我使用了:

>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 -sZLIB_SOURCE=d:\work\external\zlib-1.2.3 runtime-link=static

这将生成以下文件:

libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib

对于“正确”的编译(解决了问题),我使用了:

>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 runtime-link=static

即简单地删除了 zlib,因为这对我来说是不必要的。它产生了:

libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib
libboost_iostreams-vc100-mt-s-1_51.lib
libboost_iostreams-vc100-mt-sgd-1_51.lib

为什么原始编译中没有生成 iostreams 库?很奇怪。