POCO — легковесный, мультиплатформенный open-source набор библиотек и классов С++, облегчающих написание мультиплатформенного ПО.
Выпускается под Boost Software License.
Дополнительные сведения о POCO:
pocoproject.org/features.html
ru.wikipedia.org/wiki/POCO
Прекрасно организованная документация по структуре классов доступна в html-онлайн, html-оффлайн.
Документация по основным возможностям с примерами использования — в pdf: pocoproject.org/documentation/index.html
POCO имеет богатейший функционал — очень многое — всё-всё, что нужно для счастливой жизни C++ программиста! Работает инструментарий отлично, имеет продуманный API.
POCO собирается для большого числа ОС, в т.ч. Desktop Windows, Windows CE, Linux.
По своему опыту замечу, что POCO для этих ОС собирается без проблем.
Методику кроссплатформенной сборки из Windows для этих ОС постараюсь вам, уважаемые с++ разработчики, донести в своих трёх статьях «Cross-compile POCO из Windows».
Статья «Cross-compile POCO из Windows для WinCE» habrahabr.ru/post/223157
Метод, разрабатывался:
— для cross-platform toochain терминала Spire (ARM9)
— хост-машина Windows 7 64
— POCO Basic Edition 1.4.6p4
Соберём POCO для динамического подключения (результат — файлы
Подготовить директорию с POCO:
— скачать по адресу pocoproject.org/download/index.html архив POCO последней стабильной версии Basic Edition. По кнопке «Sources for Linux, OS X, etc.». На момент написания статьи архив — poco-1.4.6p4.tar.gz
— разархивировать в отдельную директорию. К примеру, с помощью WinRAR и в директорию C:/poco/poco-1.4.6p4.
Подготовить файл описания сборки для Unix-платформ.
Этот файл будет использоваться командой configure для определения окружения (имя утилит toolchain и другие параметры для построения makefiles)
— найти в C:/poco/poco-1.4.6p4/build/config/ файл «ARM-Linux» и перекопировать его с другим именем, например с именем вашей платформы. Я присвоил имя ARM-Linux-Spire.
Внимание! Имя это будет использовано в шаге «Сборка POCO».
Информация по файлу описания сборки и системе сборки:
Изменить наш файл ARM-Linux-*** в текстовом редакторе (я использовал Notepad++):
1) Найти и закомментировать строки
2) Из
Должно получиться так:
3) Из
Должно получиться так:
4) Найти строку
Я изменил так:
Обычно toolchain кроссплатформенной разработки для Linux-устройства поставляется вместе с оборудованием.
Это просто архив с утилитами из набора GCC ( ru.wikipedia.org/wiki/GNU_Compiler_Collection ).
Для того, чтобы узнать имя префикса, перейдите в toolchain в директорию /bin, и обратите внимание на файл
Например, мой toolchain содержит файлы:
, поэтому для моего toolchain префикс
5) Найти строку
6) Обратим внимание на настройку результата сборки:
если собирать POCO для динамического подключения:
, а для статического подключения:
Установить инструменты:
— MinGW msys. Будем использовать msys shell. У меня MinGW шёл в комплекте с sdk для устройства, а вы сможете взять с официального сайта www.mingw.org
— любую консоль для Windows с поддержкой copy-paste. Автор использовал ConEmu x64 www.conemu.ru
Открыть консоль с поддержкой copy-paste, все дальнейшие шаги будут из этой консоли.
Проверить доступность директории toochain/bin, ввести имя gcc-утилиты из вашего toochain. У меня так:
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
— снова проверить доступность toochain
Проверить доступность утилиты make:
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
— снова проверить доступность make
Войти в командную оболочку msys, выполнить:
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
Все дальнейшие шаги будут выполняться из консоли с поддержкой copy-paste + командной оболочки msys
Установить директорию с POCO текущей:
Перед сборкой (для порядка) можно проверить доступность конфигуратора
Выполнить конфигурацию POCO:
или, для сборки POCO без тестов и примеров:
если конфигурация успешна, выведется примерно такое сообщение:
— выполнить сборку POCO:
время сборки POCO с тестами и примерами на моём ПЭВМ (Intel i5 3.300Gz 8Gb) заняло 12 минут.
Собранные библиотеки POCO будут находиться в
У меня путь к собранным библиотекам POCO оказался такой:
У меня были проблемы, не связанные напрямую с POCO:
-У проекта со статическими POCO не разрешались зависимости в классе
Решение: добавить в
-Проект со статическими POCO успешно собирается, но при запуске исполняемой программы на устройстве — в консоль выдается:
Кардинальный путь поиска причин проблем связанных со сборкой POCO: подключить исходники POCO к исполняемому файлу и попробовать собрать в составе файла.
«POCO C++ Libraries GNU Make Build System» pocoproject.org/docs/99150-GMakeBuildNotes.html
***
Готовые инструментарии с++ делают наш труд более приятным и более плодотворным. Успехов, уважаемые коллеги!
Владислав Хохряков.
Выпускается под Boost Software License.
Дополнительные сведения о POCO:
pocoproject.org/features.html
ru.wikipedia.org/wiki/POCO
Прекрасно организованная документация по структуре классов доступна в html-онлайн, html-оффлайн.
Документация по основным возможностям с примерами использования — в pdf: pocoproject.org/documentation/index.html
POCO имеет богатейший функционал — очень многое — всё-всё, что нужно для счастливой жизни C++ программиста! Работает инструментарий отлично, имеет продуманный API.
POCO собирается для большого числа ОС, в т.ч. Desktop Windows, Windows CE, Linux.
По своему опыту замечу, что POCO для этих ОС собирается без проблем.
Методику кроссплатформенной сборки из Windows для этих ОС постараюсь вам, уважаемые с++ разработчики, донести в своих трёх статьях «Cross-compile POCO из Windows».
Статья «Cross-compile POCO из Windows для WinCE» habrahabr.ru/post/223157
Cross-compile POCO из Windows для Linux
Метод, разрабатывался:
— для cross-platform toochain терминала Spire (ARM9)
— хост-машина Windows 7 64
— POCO Basic Edition 1.4.6p4
Соберём POCO для динамического подключения (результат — файлы
*.so
) или для статического подключения (результат — файлы *.a
)Подготовка POCO
Подготовить директорию с POCO:
— скачать по адресу pocoproject.org/download/index.html архив POCO последней стабильной версии Basic Edition. По кнопке «Sources for Linux, OS X, etc.». На момент написания статьи архив — poco-1.4.6p4.tar.gz
— разархивировать в отдельную директорию. К примеру, с помощью WinRAR и в директорию C:/poco/poco-1.4.6p4.
Подготовить файл описания сборки для Unix-платформ.
Этот файл будет использоваться командой configure для определения окружения (имя утилит toolchain и другие параметры для построения makefiles)
— найти в C:/poco/poco-1.4.6p4/build/config/ файл «ARM-Linux» и перекопировать его с другим именем, например с именем вашей платформы. Я присвоил имя ARM-Linux-Spire.
Внимание! Имя это будет использовано в шаге «Сборка POCO».
Информация по файлу описания сборки и системе сборки:
http://pocoproject.org/docs/99150-GMakeBuildNotes.html
Изменить наш файл ARM-Linux-*** в текстовом редакторе (я использовал Notepad++):
1) Найти и закомментировать строки
STLPORT_INCLUDE= , STLPORT_LIB= , OPENSSL_INCLUDE= , CFLAGS=
. Должно получиться так:#STLPORT_INCLUDE = /usr/local/include/stlport
#STLPORT_LIB = /usr/local/lib
#OPENSSL_INCLUDE = /usr/local/arm/2.95.3/include
#OPENSSL_LIB = /usr/local/arm/2.95.3/lib
#CFLAGS = -Isrc
2) Из
SYSFLAGS =
убрать -I$(STLPORT_INCLUDE) -I$(OPENSSL_INCLUDE)
Должно получиться так:
#SYSFLAGS = -I$(STLPORT_INCLUDE) -I$(OPENSSL_INCLUDE) -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE -DPOCO_NO_FPENVIRONMENT
SYSFLAGS = -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE -DPOCO_NO_FPENVIRONMENT
3) Из
SYSLIBS =
убрать -L$(STLPORT_LIB) -L$(OPENSSL_LIB) -lstlport_arm-linux-gcc
Должно получиться так:
#SYSLIBS = -L$(STLPORT_LIB) -L$(OPENSSL_LIB) -lstlport_arm-linux-gcc -lpthread -ldl -lrt
SYSLIBS = -lpthread -ldl -lrt
4) Найти строку
TOOL = arm-linux
и изменить arm-linux
на префикс утилит toolchain от вашего оборудования.Я изменил так:
TOOL = arm-unknown-linux-gnu
Обычно toolchain кроссплатформенной разработки для Linux-устройства поставляется вместе с оборудованием.
Это просто архив с утилитами из набора GCC ( ru.wikipedia.org/wiki/GNU_Compiler_Collection ).
Для того, чтобы узнать имя префикса, перейдите в toolchain в директорию /bin, и обратите внимание на файл
*-gcc.exe
или *-g++.exe
Например, мой toolchain содержит файлы:
arm-unknown-linux-gnu-gcc.exe
arm-unknown-linux-gnu-g++.exe
, поэтому для моего toolchain префикс
arm-unknown-linux-gnu
.5) Найти строку
POCO_TARGET_OSARCH = ARM
и присвоить произвольное имя, которое во время сборки будет использовано для создания директорий с результатами сборки. Я присвоил имя POCO_TARGET_OSARCH = ARM_Spire
, чтобы отражало осмысленное имя платформы. Поэтому у меня библиотеки POCO после сборки будут располагаться в C:\poco\poco-1.4.6p4\lib\Linux\ARM_Spire
.6) Обратим внимание на настройку результата сборки:
если собирать POCO для динамического подключения:
LINKMODE
должен стоять в SHARED
, а для статического подключения:
LINKMODE
должен стоять в STATIC
Подготовка инструментов
Установить инструменты:
— MinGW msys. Будем использовать msys shell. У меня MinGW шёл в комплекте с sdk для устройства, а вы сможете взять с официального сайта www.mingw.org
— любую консоль для Windows с поддержкой copy-paste. Автор использовал ConEmu x64 www.conemu.ru
Открыть консоль с поддержкой copy-paste, все дальнейшие шаги будут из этой консоли.
Проверить доступность директории toochain/bin, ввести имя gcc-утилиты из вашего toochain. У меня так:
arm-unknown-linux-gnu-gcc -v
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
set PATH=C:\Spire\SDT\TOOLCHAIN\20140226\bin;%PATH%
— снова проверить доступность toochain
Проверить доступность утилиты make:
make -v
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
set PATH=C:\Spire\SDT\MinGW\bin;%PATH%
— снова проверить доступность make
Войти в командную оболочку msys, выполнить:
sh
— если эта утилита не найдена, то прописать путь к ней. У меня путь такой:
set PATH=C:\Spire\SDT\MinGW\msys\1.0\bin;%PATH%
Все дальнейшие шаги будут выполняться из консоли с поддержкой copy-paste + командной оболочки msys
Установить директорию с POCO текущей:
cd C:/poco/poco-1.4.6p4
Сборка POCO
Перед сборкой (для порядка) можно проверить доступность конфигуратора
./configure --help
Выполнить конфигурацию POCO:
./configure --config=ARM-Linux-Spire
или, для сборки POCO без тестов и примеров:
./configure --config=ARM-Linux-Spire --no-tests --no-samples
если конфигурация успешна, выведется примерно такое сообщение:
Configured for ARM-Linux-Spire
— выполнить сборку POCO:
make
время сборки POCO с тестами и примерами на моём ПЭВМ (Intel i5 3.300Gz 8Gb) заняло 12 минут.
Собранные библиотеки POCO будут находиться в
\lib\Linux
в директории, которую мы определили в переменной POCO_TARGET_OSARCH
в файле настроек конфигурации. У меня путь к собранным библиотекам POCO оказался такой:
C:\poco\poco-1.4.6p4\lib\Linux\ARM_Spire
Возможные проблемы
У меня были проблемы, не связанные напрямую с POCO:
-У проекта со статическими POCO не разрешались зависимости в классе
AtomicCounter
от__sync_add_and_fetch, __sync_fetch_and_add, __sync_sub_and_fetch, __sync_fetch_and_sub
Решение: добавить в
SYSFLAGS = ... -DPOCO_NO_GCC_ATOMICS
чтобы использовать другую реализацию AtomicCounter
.-Проект со статическими POCO успешно собирается, но при запуске исполняемой программы на устройстве — в консоль выдается:
/lib/libgcc_s.so.1: version 'GCC_4.3.0' not found (required by )
это происходит из-за неодинаковых версий libgcc
на устройстве и toolchain на хост-машине. Решение: прилинковать к исполняемой программе библиотеку libgcc
.Кардинальный путь поиска причин проблем связанных со сборкой POCO: подключить исходники POCO к исполняемому файлу и попробовать собрать в составе файла.
Источники информации
«POCO C++ Libraries GNU Make Build System» pocoproject.org/docs/99150-GMakeBuildNotes.html
***
Готовые инструментарии с++ делают наш труд более приятным и более плодотворным. Успехов, уважаемые коллеги!
Владислав Хохряков.