无法链接静态boost :: iostreams库

问题描述 投票:0回答:1

我构建了以下代码:

#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即可工作。

有什么问题?如何运行和构建不带共享库的程序?

c++ gcc boost gnu zlib
1个回答
0
投票

简短:-Lpath_to_zlib -lz

长:您可能知道,要在Unix上解决此问题,只需添加-lz参数。Windows用户也可以使用。您只是(更有可能)在PATH环境变量中没有zlib.a/lib位置。因此,要解决该问题,您应该添加2个参数:-Lpath_to_zlib -lz

© www.soinside.com 2019 - 2024. All rights reserved.