Подарок программистам на C++: STLport для BeOS
BeAR 17 декабря, 2003 - 22:05.STL — Standard Template Library (Стандартная Библиотека Шаблонов) ANSI C++ (начиная с 3–ей редакции стандарта, 1998 г). Она предоставляет программисту целую гамму разнообразных средств (шаблоны классов–контейнеров, алгоритмов и проч.), порой очень сильно упрощающих и ускоряющих разработку программ.
До недавнего времени под BeOS существовала только одна реализация STL(*) от 1999 г (заголовочные файлы лежат в /boot/develop/headers/cpp, реализация — в динамической библиотеке libstdc++.r4.so). Она немного отличается от текущей версии стандарта + заметно уступает по производительности другим современным реализациям.
Не так давно ребята из OpenBeOS обмолвились о своих планах использовать STLport в будущих версиях системы (или даже в R1). STLport — это бесплатная многоплатформенная, с открытыми исходными кодами реализация STL.
Из списка достоинств STLport следует особо выделить:
— переносимость (многоплатформенность)
— наличие debug–режима (под BeOS не работает, читайте дальше почему)
— безопасность использования в многопоточных программах
— безопасность исключений (библиотека гарантирует отсутствие утечек памяти по приничине возникновения исключений)
Во главе проекта STLport стоит русский программист Борис Фомитчев. Подробней об STLport можно почитать на сайте http://www.stlport.com
В общем я подумал, а зачем ждать? :) В исходниках последней стабильной (4.6) версии обнаружился специфический для BeOS код (в основном, из Kernel Kit BeOS API). После небольшой правки удалось собрать полнофункциональную библиотеку(**). Готовый пакет для BeOS R5 и Dano выложен на BeBits.com
В принципе, в README всё описано и инсталляция происходит в автоматическом режиме, но для не умеющих читать по–английски программистов (эх, когда–то сам таким был) повторю кое–какие ключевые моменты.
1) В пакет включен специальный шаблон проекта BeIDE с использованием STLport. Называется он BeSTLport (можно выбрать при создании проекта из меню File–>New Project ).
2) Для компиляции с помощью gcc (g++, ) необходимо дополнительно включать опцию -I/boot/develop/headers/stlport и библиотеку libstlport_gcc.so. Например, так:
g++ my_prog.cpp -o my_prog -l/boot/develop/headers/stlport -lstlport_gcc
Важно не перепутать буквы флагов. Для пути к заголовочным файлам это I [ай], а для библиотеки — l [эл].
3) Если вы хотите использовать STLport в уже существующих проектах BeIDE, то вам надо проделать шаг-за–шагом следующее:
— открыть окно настроек проекта (меню Edit–>Project Settings
)
— во вкладке 'Access paths' выбрать и удалить из списка 'System' путь /boot/develop/headers/cpp (как вариант его можно перенести В КОНЕЦ списка, никаких тяжких последствий от этого не замечено)
— добавить в НАЧАЛО этого же списка путь /boot/develop/headers/stlport
— сохранить изменения и закрыть окно настроек
— удалить из проекта библиотеку libstdc++.r4.so (если она там есть)
— добавить в проект библиотеку /boot/develop/lib/x86/libstlport_gcc.so (или libstlport_gcc.a, если хотите встроить используемые функции в бинарник программы и распростанять её без библиотеки)
4) Для STLport важно, чтобы путь к её заголовочным файлам был у компилятора ПЕРВЫМ в списке путей.
5) Не пугайтесь(/ругайтесь :)), если использующие STL программы перестанут компилироваться. В большинстве случаев в качестве лекарства подойдёт вставка 'using namespace std;' в начало кода программы, но вообще рекомендую почитать описание последней версии стандарта STL. Всё–таки Be'шная реализация была довольно старой.
(*): На самом деле их две. Вторая — это та, что идёт вместе с GCC 3.x в YellowTAB Zeta.
(**): Готовая сборка успешно прошла все идущие с исходниками STL–тесты. Но из–за отсутсвия реализации кое–каких платформенно–зависимых функций не удалось собрать stldebug–версию библиотеки, очень жаль :(
Отправить комментарий