我构建了以下代码:
#include <boost/iostreams/filter/zlib.hpp>
#include <iostream>
int main(int argc, char* argv[])
{
int a = boost::iostreams::zlib::default_compression;
std::cout << a;
return 0;
}
使用命令:
g++ -Wall -ID:\boost_1_72_0 -c -o Source.o Source.cpp
g++ -Wall -ID:\boost_1_72_0 Source.o -LD:\boost_1_72_0\stage\lib -lboost_iostreams-mgw63-mt-x32-1_72 -o Source.exe
并且它有效,但是仅当boost_iostreams-mgw63-mt-x32-1_72是共享库时才有效。如果我尝试使用静态库,则会出现以下错误:D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x124): undefined reference to crc32'
我使用以下命令构建静态库:b2 -a -q -j8 address-model=32 link=static threading=multi toolset=gcc runtime-link=shared variant=release --with-iostreams -sZLIB_INCLUDE="C:\Program Files (x86)\GnuWin32\include" -sZLIB_LIBPATH="C:\Program Files (x86)\GnuWin32\lib" -sBZIP2_INCLUDE="C:\Program Files (x86)\GnuWin32\include" -sBZIP2_LIBPATH="C:\Program Files (x86)\GnuWin32\lib"
如果我将link = staic更改为link = shared,然后将dll复制到项目的文件夹-一切正常。但我希望程序不带dll即可工作。
有什么问题?如何运行和构建不带共享库的程序?
简短:-Lpath_to_zlib -lz
。
长:您可能知道,要在Unix上解决此问题,只需添加-lz参数。Windows用户也可以使用。您只是(更有可能)在PATH环境变量中没有zlib.a/lib
位置。因此,要解决该问题,您应该添加2个参数:-Lpath_to_zlib -lz
。