Меню Рубрики

Установка boost code blocks


A beginner’s quick reference for setting up Boost with Code::Blocks in Windows
Supported compilers: MinGW or MSVC

  • Windows compiler — You need to have correctly installed the free MinGW/GCC compiler or one of Microsoft’s compilers (the Express editions are free, but you must also install the Platform SDK). The latest stable release of Code::Blocks includes a MinGW-bundled version which includes all necessary packages; or, if you install it by hand, you need at least the gcc-core, gcc-g++, binutils, w32api, and mingw32-make packages. Also, ensure that the folder containing the compiler executables (typically C:\Program Files\CodeBlocks\bin) is in your Windows PATH environment variable.
  • Recent version of Code::Blocks — You need to have successfully installed and run a recent version of Code::Blocks – either the latest stable release or a recent nightly build.


Download Boost

You can download the Boost source code and compile it yourself, or, only if you are using MSVC 2003 (7.1) or later, you can use a web-based installer to download pre-built libraries.

Boost Source Code

The Boost libraries are distributed as source code archived in .7z, .tar.bz2, .tar.gz, or .zip format; choose whichever archive format is easiest for you to unpack. The current stable release of Boost is 1.47.0. Click here to browse the Boost 1.47.0 version info and files. You can check the Boost home page at boost.org to see if a newer stable version is available.

You also need to download Boost Jam in order to build Boost. The current stable release of Boost Jam is 3.1.18. Click here to download Boost Jam for Windows (boost-jam-3.1.18-1-ntx86.zip; 121.4 KB).

Note: Downloading precompiled bjam seems to be an outdated method. To build bjam from source, use bootstrap.bat from Boost base directory. Bootstrap.bat assumes you are using msvc compiler, to use Gcc, type «bootstrap.bat gcc»

It is highly recommended that you unpack both archives to paths without spaces. You should choose a volume with at least 1.5 GB of free space. Typically, the Boost sources and Boost Jam are unpacked in separate locations, ending up with «

Boost Installer for MSVC 2003 (7.1) or later

BoostPro Computing distributes a free web-based installer that will download and install prebuilt versions of the Boost libraries for MSVC. Click here to browse the BoostPro Free Downloads. The amount of space used by the installation varies depending on which libraries and variants you choose.

Build Boost

This step is unnecessary if you are using the BoostPro installer

  • Open up a command prompt for building. If you are using MinGW/GCC, simply use the standard Windows command shell (open the Start menu, click «Run. «, enter «cmd» and hit OK). If you are using MSVC, you should use the special command shell which sets up the correct environment variables for you. If you use a version of MSVC which required you to download the Platform SDK separately, ensure that whichever command environment you use includes the Platform SDK tools and paths as well as the standard compiler tools and paths.
  • Ensure that Boost Jam is in the PATH environment variable (where

is the path you unpacked Boost Jam to):

  • Ensure that the compiler is in the PATH environment variable:
  • Change to the Boost sources directory (where

    is the path you unpacked the Boost sources to):

Note: the /D flag after cd may be omitted from the command; it simply allows command prompt to change drives if necessary.

  • Execute the build command. The recommended command to use for MinGW/GCC is (where is where you want the Boost headers and libraries; typically C:\Program Files\CodeBlocks):
  • The recommended command to use for MSVC is (where is where you want the Boost headers and libraries):
  • This step will generally take 5-20 minutes, depending on the capabilities of your PC.
  • The above commands will build release, multithreaded, DLL versions of the Boost libraries. If you want other variants, add —build-type=complete to the command line. This will take a much longer amount of time to build.

Add Boost to an existing project in Code::Blocks

The Boost libraries are usable in nearly any Code::Blocks project. You can create a new project that will use Boost or open an existing project. With your project open, perform these steps.

Set up a Code::Blocks global variable for Boost

This step only needs to be performed once, after which the global variable you’ve created will be available for any project.

  • Open the Settings menu and select «Global variables. «
  • Click the «New» button next to the Current variable list, specify a name like «boost», and hit OK
  • In the «base» field of the Builtin fields section, browse for the base of your Boost installation — the path you specified in the —prefix option of the build command
  • In the «lib» field, browse for the «stage\lib» subfolder of your Boost installation — it should be the path in the «base» field with «\stage\lib» tacked on. (This is the folder that contains either multiple lib*.a or *.lib files.)
  • Hit the Close button to save your global variable

Add Boost search directories to your project

  • Right-click your project’s name in the Projects section of the Management window and select «Build options. «
  • Highlight the root of your project in the tree on the left side of the Project build options window
  • Select the «Search directories» tab
  • With the «Compiler» subtab selected, click the Add button, enter «$(#boost.include)» (without the quotes), and hit OK

If you are using the bundled version of MinGW with Code::Blocks, and you used your C::B installation in the —prefix option as recommended, the following step is unnecessary

  • With the «Linker» subtab selected, click the Add button, enter «$(#boost.lib)» (without the quotes), and hit OK

Include Boost headers and link with Boost libraries

Your project is now ready to use the Boost libraries. For each library you want to use, do the following:

  • #include in your source file
  • In your project’s build options, highlight the root of your project, select the «Linker settings» tab, and add «boost_*-mgwXX-mt-1_47» to your Link libraries

For example, use «#include «, «boost_filesystem-mgw45-mt-1_47» and «boost_system-mgw45-mt-1_47» to use boost.filesystem.

settings compiler & debugger linker settings add

examples: (order does matter) F:\CodeBlocks\lib\libboost_regex-mgw44-1_51.a F:\CodeBlocks\lib\libboost_thread-mgw44-mt-1_51.a F:\CodeBlocks\lib\libboost_chrono-mgw44-1_51.a f:\codeblocks\lib\*.a

Test boost installation

After the installation, you can use these two examples to test whether your boost installation and the configuration of your Code::Blocks are successful. If it fails, this post may have some useful information.

Frequently Asked Questions

Do I need to link with a library for every Boost component I use?

No. Only some of the Boost components require pre-compilation and additional linked-in code. You can even skip building Boost altogether, if you’ll only need components without a link-time library. If you want to know whether a specific component requires a pre-built library, just try including the header(s) without making any linker additions. If you get undefined reference errors, you’ll need to add the component’s library. Boost maintains a list of which libraries require pre-compilation. (An undefined reference error including WSA requires the windows sockets libraries, ws2_32 and wsock32.)


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

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

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

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

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

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

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


Я не уверен, что вы подразумеваете под которые строят автоматически. Большинство библиотек Boost предназначены только для заголовков, но некоторые, такие как regex, необходимо скомпилировать в разделяемую / статическую библиотеку. Шаг компиляции не автоматический, вам нужно вызвать систему сборки 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

Другие решения

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

  1. Скачай Boost zip, разархивируй куда-нибудь (я назову это место $boostdir )
    • Довольно большой в разархивированном виде,> 300 МБ
  2. Добавьте MinGW bin в PATH var
    • Когда Boost собирается, ему понадобится доступ к исполняемым файлам MinGW.
  3. строить b2.exe а также bjam.exe
    • документация для Windows беспечно предполагает компилятор MSVC доступен.
    • Если это так, вы можете использовать bootstrap.bat как говорят документы
    • Если это не так (как у меня), вам придется создавать исполняемые файлы самостоятельно, в шагах 4 и 5.
  4. В CMD перейдите к $boostdir/tools/build/v2/engine
  5. Бежать build.bat mingw (будет строить b2.exe а также bjam.exe )
    • Немного устаревшей базовой документации по этому вопросу
  6. Теперь у вас есть b2 а также bjam изготовленный на заказ согласно вашей спецификации системы. Вернитесь обратно к $boostdir и будьте готовы начать строить библиотеки.
    • Boost сделает новый bin.v2 каталог в текущем каталоге.
    • Все либы войдут в bin.v2 ,
    • Это «промежуточный» каталог, по некоторым причинам
    • Ничего не делать на этом этапе, просто дополнительная информация 🙂
  7. Бежать b2 toolset=gcc —build-type=complete
    • Это занимает много времени, в окрестностях 12 часов.
    • Вы узнаете, работает ли он. Если вы думаете, что что-то не так, это не работает.
    • Сборка может использовать различные флаги

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

  1. Направьте ваш компилятор на файлы заголовков
    • Щелкните правой кнопкой мыши свой проект -> Параметры сборки -> вкладка «Поиск в каталогах» -> вкладка «Компилятор» -> добавить $boostdir адрес
  2. Boost построил DLL для библиотеки, которую вы хотите в соответствии с вашей текущей спецификацией системы. Посмотри в stage\lib\ каталог $boostdir
    • Эта DLL будет использоваться позже в компоновщике, поэтому пока не закрывайте ее окно обозревателя.
    • Моя была в C:\Program Files\Boost_1_52\stage\lib\libboost_regex-mgw44-1_52.dll
    • Я думаю, что у документации был умный способ сделать это, но я еще не попробовал это
    • «Промежуточный» каталог из шага № 6 можно удалить теперь, когда сборка завершена
  3. Укажите ваш компоновщик на каталог этой DLL
    • Щелкните правой кнопкой мыши свой проект -> Параметры сборки -> вкладка Поиск в каталогах -> вкладка компоновщика -> добавить
      этот адрес каталога ( blah\blah\blah\stage\lib\ )
  4. Добавьте этот флаг DLL в настройки компоновщика
    • Мой был -lboost_regex-mgw44-1_52
  5. Глубокое дыхание, молитвы своему богу, и запустить тест.

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

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


Installing Boost libraries with MinGW and CodeBlocks

I’m having my first fling with the Boost libraries, and I’ve picked a pretty girl named Regex.

I’ve installed the libraries (which build automatically?) on my machine, but I’m getting the above error (cannot find -lboost_regex ). I’m using Code::Blocks with MinGW, and a C++0X compiler flag.

  • Pointed the «search directories» to the installation directory
  • Added the -lboost_regex flag to the linker

but no luck. Can someone help me get this working?

Got things running now. I’ve added some further notes in an answer below, for newcomers to this problem.

(Also, changed the title of the question since it turned out to be a broader issue than when I started out.)

2 Answers 2

I’m not sure what you mean by which build automatically. Most of the Boost libraries are header-only, but a few, such as regex, need to be compiled to a shared / static library. The compilation step is not automatic, you need to invoke the Boost build system ( bjam ) to do this. Of course, there are sources (BoostPro for instance) that distribute pre-built Boost binaries for various platforms.

Once that’s done, you need to add the path where the libraries are present to the linker’s search path. For MinGW, this option is -L»path/to/library» . Boost does have directives to allow auto-linking of the required libraries, and this seems to work pretty well with MSVC, but I’ve never gotten it to work with MinGW. So you must also list the libraries to be linked explicitly. The Boost libraries include target and version information in the file name by default, so a typical linker command line option will look like -lboost_regex-mgw47-mt-1_51 for MinGW gcc 4.7 and Boost 1.51

Here’s some links and tips that can help a newcomer, from my first build experience. I built the libraries directly from the zip file. I built on MinGW and I used CodeBlocks for the 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.
    • If it is, you can apparently use the bootstrap.bat like the docs say.
    • If it’s not (like mine), you’ll have to build the exe files yourself, in steps 4 and 5.
  4. In CMD, navigate to $boostdir/tools/build/v2/engine
  5. Run build.bat mingw (will build b2.exe and bjam.exe )
    • Some aging basic documentation on that
  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.
    • All the libs will go in bin.v2 .
    • This is an «intermediate» directory, for some reason
    • Nothing to do in this step, just some extra info 🙂
  7. Run b2 toolset=gcc —build-type=complete
    • This takes a long time, in the neighborhood of 1 — 2 hours.
    • You’ll know if it’s working. If you think something’s wrong, it’s not working.
    • The build can use various flags

Now you’re all built. Time to set up 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
    • Mine was in C:\Program Files\Boost_1_52\stage\lib\libboost_regex-mgw44-1_52.dll
    • I think the documentation had a smart way to do this but I haven’t tried it yet
    • The «intermediate» directory from step #6 can be deleted now that the build is finished
  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. Deep breath, prayers to your god, and fire up a test.

Further docs that may either help or confuse:

The Code::Blocks website has a version of this that I didn’t find until I neared the end of my search. It was fairly helpful but had a few weird things. This post also is helpful.


Кросс-компиляция и отладка C++ Windows-приложения под Linux

Показали мне недавно интересное приложение, под которое можно разрабатывать плагины. Приложение оказалось очень полезным для научной работы, но вот незадача — приложение разработано под Windows, у меня стоит Ubuntu. Windows для разработки под это приложение от лаборатории получить пока не удалось. Чтобы не тратить время, решил освоить кросс-компиляцию и отладку этого приложения.

Итого, имеется:
Ubuntu 12.10 x64
Не-юникодное приложение Мастерская Граф-Моделей (МГМ) (В командах консоли будет называться gmw.exe)

Разрабатывать и отлаживать плагины (dll-библиотеки), не устанавливая Windows.

И тут нам помогут Wine, Code::Blocks, портированное GDB, и boost.

Wine, не юникодное приложение, английский интерфейс Ubuntu и русский язык

При попытке открыть не юникодное приложение под Wine

получаются зюки следующего вида:

На эту проблему интернет очень быстро дает следующую подсказку:

В моём случае, данный подход не улучшил ситуацию ни на йоту.
Как выяснилось, русских локалей в системе не было добавлено (тыц).

Теперь запускаем с выше-указанной подсказкой

И, вуаля, запускается приложение с читаемым русским текстом:

Настройка IDE Code::Blocks для кросс-компиляции и отладки

Установка Code::Blocks

В дальнейшем для отладки нам потребуется менять код плагина отладки поэтому лучше сразу взять версию Code::Blocks из под svn.
Устанавливаем svn:

С помощью svn получаем код C::B, для этого переходим в папку, в которую хотим сохранить код C::B, где и набираем:

Переходим в полученную папку ‘trunk’.

Компиляция C::B происходит с помощью g++, autotools, automake и некоторых других утилит, которые необходимо установить:

Кроме того Code::Blocks зависит от wxWidgets:

Подстраиваем установщик под компьютер (можно запускать единожды):

И дальше, устанавливаем сам codeblocks (ключ —prefix можно упустить для использования настроек по-умолчанию):

Более подробно можно посмотреть по ссылке.

Настройка компиляции и линковки

Выполняем пункты с 1 по 5 с форума Code::Blocks. После этого компиляция программ должна работать, если не используется линковка к платформо-зависмым библиотекам (линковка с boost::regexp будет рассмотрена позже).
(*) В новом Code::Blocks немного изменилось меню по сравнению с инструкцией. Настройки искать нужно в ‘Settings->Compiler. ‘. Для старого Code::Blocks (10.05) пункт 5 нужно выполнить полностью, для нового же (12.11) настройку касающуюся gdb в 5 пункте пока трогать не будем.

Если используется boost его лучше положить отдельно от /usr/include, т.к. по этому адресу лежит много linux-специфичных заголовочных файлов, которые мы не хотим включать в проект при компиляции под Windows.

UPD: При настройке линковки в поле «Other Linker Options» имеет смысл добавить опцию «-Wl,—subsystem,windows,—kill-at», которая помечает, что это реально Windows DLL, и, что самое главное, запрещает использовать декорирование символов (—kill-at) при экспорте функций с соглашением вызова __stdcall. Подрбнее здесь и здесь.

Начиная с пункта 7 по ссылке выше, описывается кросс-отладка, но, к сожалению, insight.exe, упоминающийся в инструкциях, найти не удается. Поэтому пойдем своим путем.

Кросс-отладка в Code::Blocks & MingW32 gdb для Windows

gdb, который является родным для линукса частично умеет отлаживать Windows приложения, правда, умеет он только останавливаться на исключениях и почти всегда игнорирует точки останова. Чтобы справиться с этими проблемами скачиваем gdb в пакете mingw32 под Windows. Для этого скачиваем и затем распаковываем и переходим в подпапку ‘bin’. Устанавливаем gdb под Windows:

Теперь в этой же папке bin появился файл gdb.exe, он-то нам и нужен.

Создаем скрипт для имитации обычного gdb для этого в файл /usr/bin/i586-mingw32msvc-gdb

Для старого C::B все уже настроенно, для нового же отладчик нужно настроить дополнительно. В пункте ‘Settings->Debugger’ кликаем по ‘GDB/CDB debugger’ затем по ‘Create Config’. В новом конфиге меняем команду запуска отладчика на ‘/usr/bin/i586-mingw32msvc-gdb’, остальные настройки по желанию. После этого идем в ‘Settings->Compiler. «, в пункте ‘Selected Compiler’ выбираем тот компилятор, который настраивали до этого и затем на вкладке ‘Toolchain executables’ меняем ‘Debugger’ на наш свежесозданный конфиг. Теперь отладчик будет останавливаться на точках останова, хотя и остановить программу в произволльный момент не сможет (данная проблема пока еще не решена). Правда при попытке отладить,C::B выдает следующую ошибку:

Эта ошибка говорит о том, что плагин отладчика в C::B не понимает выдачу отладчика gdb.exe. Как выяснилось при ближайшем рассмотрении плагин отладчика имеет платформо-зависимый код, и вот тут-то и нужно вспомнить что у нас есть исходники C::B. Мы сейчас слегка подкоррекируем код этого плагина. Нужно будет поменять код только одного файла ‘/src/plugins/debuggergdb/gdb_driver.cpp’
Для этого нужно перейти в корень проекта C::B (откуда запускалась команды ./bootstrap), по умолчанию это папка ‘trunk’. И накактить патч:

Ну и пересобираем Code::Blocks:

И почти все готово, остается только создать проект. Шаги 12-13 по ссылке. Если же вы хотите создать проект dll-библиотеки, то указывайти создание динамической библиотеки в мастере и переименовывайте разширение в dll.
Проверям, что в настройках проекта стоит выбранная нами цепь компилятор-линкер-отладчик. ‘<Правая клавиша на проект>-Build Options. ‘ пункт ‘Selected compiler’, и можно радоваться и отлаживаться. Напомню, что по какой-то причине отладчик не может быть прерван во время исполнения, т.е. все отладочные действия могут буть применены только во время останова программы. В частности нельзя поставить новую точку останова, если программа не стоит на какой-либо другой точке останова…

Линкование статической библиотеки boost’а

Библиотека boost в основном является набором заголовочных файлов, и потому никаких проблем с линковкой обычно не возникает. Но для некоторых частей boost’а необходимо линковаться к статической библиотеке, например, boost::regex. Пробуем собрать проект и получаем:

Ошибка возникает из-за того, что мы пытаемся прилинковаться к linux билиотеке, для того чтобы построить windows-приложение.
Чтобы слинковаться нужно скомпилировать boost::regex с помощью MingW32 (про кросс-компиляцию). Скачиваем boost, распаковываем и переходим в папку с распаковынным boost’ом. Создаем файл user-config.jam в корне домашней директории:

Дальше настраиваем сборку и собираем:

После выполнения последней команды у меня были ошибки «failed updating 1 target», что, правда, не мешает собираться программам.

В результате, у нас есть полностью подготовленная среда для написания, сборки и отладки Windows-приложений или Windows-библиотек из под Linux. Теперь можно приступать к работе…


Читайте также:  Установка газа в кукморе

Добавить комментарий