Установка библиотек Boost с MinGW и CodeBlocks

У меня первое знакомство с библиотеками Boost, и я выбрал симпатичную девушку по имени Regex.

Я установил библиотеки (которые собираются автоматически?) на свой компьютер, но получаю указанную выше ошибку (не могу найти -lboost_regex). Я использую Code::Blocks с MinGW и флаг компилятора C++0X.

у меня есть

  • Указал «каталоги поиска» на каталог установки
  • В компоновщик добавлен флаг -lboost_regex

но не повезло. Может ли кто-нибудь помочь мне заставить это работать?


Обновить

Теперь дела идут. Я добавил несколько дополнительных заметок в ответ ниже для новичков в этой проблеме.

(Кроме того, я изменил название вопроса, поскольку он оказался более широкой проблемой, чем когда я начинал.)


person Ben    schedule 10.11.2012    source источник
comment
'какая сборка автоматически?' Это ваша ошибка, я думаю. boost.org/doc/libs/ 1_52_0/libs/regex/doc/html/boost_regex/   -  person john    schedule 10.11.2012
comment
Что вы сделали для установки библиотек? По моему опыту, вы либо получаете пакет повышения с уже собранными библиотеками (например, с дистрибутивом nuwen MinGW и пакетом BoostPro или boost.teeks99.com для библиотек повышения MSVC), либо создаете их самостоятельно. Я не знаком с установкой, которая создает их "автоматически" (хотя я был бы рад узнать о такой вещи).   -  person Michael Burr    schedule 10.11.2012
comment
Ой. Это может быть все. Я просто скачал установщик и запустил его. Я думал, что где-то читал, что он построил все одновременно. Во всяком случае, я пытался собрать себя, используя boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/, но есть новый набор проблем... думаю, вместо этого я сосредоточу свои усилия на этом.   -  person Ben    schedule 10.11.2012
comment
Вы должны добавить путь к библиотекам Boost в путь поиска компоновщика, как указал Преториан. Кстати, вы получаете эту ошибку при ссылке?   -  person SChepurin    schedule 10.11.2012
comment
@SChepurin да, но оказалось, что я еще не собрал библиотеки. Я только добавил переменную в компоновщик и указал компилятору файлы заголовков.   -  person Ben    schedule 11.11.2012


Ответы (2)


Я не совсем понимаю, что вы имеете в виду под автоматически строить. Большинство библиотек Boost содержат только заголовки, но некоторые, такие как регулярное выражение, необходимо скомпилировать в разделяемую/статическую библиотеку. Этап компиляции не является автоматическим, для этого вам нужно вызвать систему сборки Boost (bjam). Конечно, есть источники (например, BoostPro), которые распространяют готовые двоичные файлы Boost для различных платформ.

Как только это будет сделано, вам нужно добавить путь, по которому находятся библиотеки, к пути поиска компоновщика. Для MinGW этот параметр равен -L"path/to/library". У Boost есть директивы, позволяющие автоматически связывать необходимые библиотеки, и это, кажется, работает довольно хорошо с MSVC, но я никогда не заставлял его работать с MinGW. Таким образом, вы также должны указать библиотеки, которые должны быть связаны явно. Библиотеки Boost по умолчанию включают информацию о цели и версии в имя файла, поэтому типичный параметр командной строки компоновщика будет выглядеть как -lboost_regex-mgw47-mt-1_51 для MinGW gcc 4.7 и Boost 1.51.

person Praetorian    schedule 10.11.2012
comment
О, теперь я вижу. Библиотека должна быть собрана отдельно в зависимости от используемого компилятора, поэтому, конечно, Boost не будет распространять все разные сборки. Спасибо за помощь. - person Ben; 10.11.2012
comment
Бум наконец понял. Большое спасибо. - person Ben; 11.11.2012

Вот несколько ссылок и советов, которые могут помочь новичку, из моего первого опыта сборки. Я собрал библиотеки прямо из zip-файла. Я построил на MinGW и использовал CodeBlocks для IDE.

  1. Download Boost zip, unzip somewhere (I'll call that place $boostdir)
    • Pretty large when unzipped, > 300MB
  2. Add MinGW bin to PATH var
    • When Boost builds, it will need access to MinGW executables
  3. Build b2.exe and bjam.exe
    • The documentation for Windows blithely assumes MSVC compiler is available.
    • Если это так, вы, по-видимому, можете использовать bootstrap.bat, как говорится в документах.
    • Если это не так (как у меня), вам придется самостоятельно создавать исполняемые файлы на шагах 4 и 5.
  4. В CMD перейдите к $boostdir/tools/build/v2/engine
  5. Run build.bat mingw (will build b2.exe and bjam.exe)
  6. Now you've got b2 and bjam custom-built according to your system spec. Navigate back up to $boostdir and get ready to start building the libraries.
    • Boost will make a new bin.v2 directory in the current directory.
    • Все библиотеки войдут в bin.v2.
    • Это "промежуточный" каталог, по какой-то причине
    • На этом этапе делать нечего, просто дополнительная информация :)
  7. Run b2 toolset=gcc --build-type=complete
    • This takes a long time, in the neighborhood of 1 - 2 hours.
    • Вы узнаете, работает ли он. Если вы думаете, что что-то не так, это не работает.
    • Сборка может использовать различные флаги.

Теперь вы все построены. Время настроить CodeBlocks.

  1. Point your compiler to the header files
    • Right click your project -> Build Options -> Search Directories tab -> Compiler tab -> add $boostdir address
  2. Boost has built a DLL for the library you want according to your current system spec. Look in the stage\lib\ directory of $boostdir
    • This DLL will be used later in the linker, so don't close its explorer window yet
    • Мой был в C:\Program Files\Boost_1_52\stage\lib\libboost_regex-mgw44-1_52.dll
    • Я думаю, что в документации есть умный способ сделать это, но я еще не пробовал
    • «Промежуточный» каталог из шага № 6 можно удалить теперь, когда сборка завершена.
  3. Point your linker to the directory of that DLL
    • Right click your project -> Build Options -> Search Directories tab -> Linker tab -> add that directory address (blah\blah\blah\stage\lib\)
  4. Add that DLL flag to your linker settings
    • Mine was -lboost_regex-mgw44-1_52
  5. Глубокий вдох, молитвы своему богу и запуск теста.

Дополнительные документы, которые могут либо помочь, либо запутать:

На сайте Code::Blocks есть версия этого, которую я не найти, пока я не приблизился к концу моего поиска. Это было довольно полезно, но было несколько странных вещей. Это сообщение также полезно.

Удачи!

person Ben    schedule 11.11.2012
comment
bootstrap.bat по умолчанию использует MSVC в Windows, но вы можете переопределить это, запустив bootstrap.bat mingw, и избавить себя от необходимости навигации по подкаталогам. - person Praetorian; 12.11.2012