Главная

Подарок программистам на C++: STLport для BeOS

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–версию библиотеки, очень жаль :(

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
M
z
f
B
f
P
Enter the code without spaces and pay attention to upper/lower case.