Не могу связать stati c boost :: библиотека iostreams - PullRequest
0 голосов
/ 07 апреля 2020

Я строю следующий код:

#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 является общей библиотекой , Если я попытаюсь использовать библиотеку stati c, она выдаст мне следующую ошибку: 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'

Я создаю библиотеку stati c с помощью следующей команды: 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 = stai c на link = shared, а затем копирую dll в папку проекта - все будет хорошо. Но я хочу, чтобы программа работала без библиотек.

В чем проблема? Как запустить и собрать программу без общих библиотек?

1 Ответ

0 голосов
/ 09 апреля 2020

Short: -Lpath_to_zlib -lz.

Long: Как вы, возможно, знаете, для решения этой проблемы на unix вам просто нужно добавить аргумент -lz. То же самое работает для windows пользователей. У вас просто (более вероятно) нет местоположения zlib.a/lib в переменной окружения PATH. Таким образом, чтобы решить проблему, вы должны добавить 2 аргумента: -Lpath_to_zlib -lz.

...