【发布时间】:2020-07-19 20:14:36
【问题描述】:
我构建了以下代码:
#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 的情况下工作。
有什么问题?如何在没有共享库的情况下运行和构建程序?
【问题讨论】: