E.K*_*.K. 14 c++ boost unresolved-external boost-iostreams bzip2
我的项目是使用旧版本的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)
...
Run Code Online (Sandbox Code Playgroud)
任何想法如何来lib不包含所有这些代码?我错过了什么?我在Windows上使用VS2010.
编辑:知道了!
有一个没有bzip编译的旧版libboost_iostreams-vc100-mt-sgd-1_51.lib.我仍然不确定的是:我使用的原始编译:
>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 -sZLIB_SOURCE=d:\work\external\zlib-1.2.3 runtime-link=static
Run Code Online (Sandbox Code Playgroud)
这产生了以下文件:
libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib
Run Code Online (Sandbox Code Playgroud)
对于"正确的"编译(解决了问题),我使用了:
>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 runtime-link=static
Run Code Online (Sandbox Code Playgroud)
即只是删除了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
Run Code Online (Sandbox Code Playgroud)
为什么没有在原始编译中生成iostreams库?很奇怪.
谢谢.
来自EK的问题答案:
有一个旧版本的 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
Run Code Online (Sandbox Code Playgroud)
这产生了以下文件:
libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib
Run Code Online (Sandbox Code Playgroud)
对于“正确”的编译(解决了问题),我使用了:
>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 runtime-link=static
Run Code Online (Sandbox Code Playgroud)
即简单地删除了 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
Run Code Online (Sandbox Code Playgroud)
为什么原始编译时没有生成 iostreams 库?很奇怪。
归档时间: |
|
查看次数: |
1708 次 |
最近记录: |