Как построить стати c Boost библиотеки? - PullRequest
0 голосов
/ 08 апреля 2020

В частности, stati c boost :: iostreams с поддержкой zlib (aka libz).

Проблема заключается в том, что при попытке связать библиотеку stati c она выбрасывает неразрешенные символы. В то же время, когда я пытаюсь связать библиотеку Dynami c, все работает ...

Я искал ответ в течение нескольких дней и пока не могу его найти.

команда, которую я использую для сборки общая библиотека: b2 -a -q -j8 address-model=32 toolset=gcc --with-iostreams link=shared runtime-link=shared -sZLIB_INCLUDE="path" -sZLIB_LIBPATH="path" -sBZIP2_INCLUDE="path" -sBZIP2_LIBPATH="path"

команда, которую я использую для создания stati c библиотека: b2 -a -q -j8 address-model=32 toolset=gcc --with-iostreams link=static runtime-link=static -sZLIB_INCLUDE="path" -sZLIB_LIBPATH="path" -sBZIP2_INCLUDE="path" -sBZIP2_LIBPATH="path"

Пример программы:

#include <iostream>
#include <boost/iostreams/filter/gzip.hpp>

int main(int argc, char* argv[]) {

  int a = boost::iostreams::zlib::default_compression;
  std::cout << a << std::endl;

  return 0;
}

Исключение, которое я получаю:

D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x124): undefined reference to `crc32'
D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x181): undefined reference to `deflate'
D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x1a1): undefined reference to `inflate'
D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x1cc): undefined reference to `deflateReset'
D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x1e5): undefined reference to `inflateEnd'
D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x201): undefined reference to `inflateReset'
D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x214): undefined reference to `deflateEnd'
D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x3c9): undefined reference to `inflateInit2_'
D:\boost_1_72_0\stage\lib/libboost_iostreams-mgw63-mt-s-x32-1_72.a(zlib.o):zlib.cpp:(.text+0x469): undefined reference to `deflateInit2_'
collect2.exe: error: ld returned 1 exit status
makefile:15: recipe for target 'Source.exe' failed
mingw32-make: *** [Source.exe] Error 1
The terminal process terminated with exit code: 1

ОБНОВЛЕНИЕ: Также в случае, если проблема может быть связана с zlib или bz2: я получил bz2 lib здесь: http://gnuwin32.sourceforge.net/packages/bzip2.htm и zlib здесь: http://gnuwin32.sourceforge.net/packages/zlib.htm И я попытался собрать zlib самостоятельно с помощью их make-файла win32. Я получил libz.a и попытался собрать с ним, ничего не изменилось.

1 Ответ

1 голос
/ 08 апреля 2020

Как вы, возможно, знаете, для решения этой проблемы на unix вам просто нужно добавить -lz аргумент.

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

...