Використання open source ПЗ c продуктами IBM: Cборка Libodbc + + на AIX5L, Вільне ПЗ, Програмні керівництва, статті

Введення


Час програмного забезпечення з відкритим вихідним кодом нарешті прийшло. Незважаючи на думку конкурентів про руйнівності цієї технології, протягом більше двадцяти років вона впевнено набирає силу. IBM – лідер ІТ-індустрії, активно підтримує співтовариство Open Source. В середині червня 1998 IBM вирішила підтримувати відкритий web-сервер Apache і включила його в своє ПЗ WebSphere. З цього часу прихильність IBM ПО Open Source істотно зросла, починаючи з вкладу в розробку ядра Linux і до можливості використання Linux в якості основної операційної системи в старших моделях серверів IBM pSeries eServers.


ODBC – це відкрита специфікація, введена Microsoft на початку 1990-х років, щоб забезпечити передбачуване API для доступу до загальних джерел даних. За минулі кілька років ця специфікація фактично стала промисловим стандартом для розробників додатків, який дає можливість безперешкодного з’єднання та обміну даними між додатками і системами управління реляційними базами даних (СУБД). У типовій системі з ODBC диспетчер драйверів забезпечує інтерфейс для програми. Він динамічно завантажує необхідний драйвер (або драйвери) для СУБД, з якою з’єднується додаток. Існує кілька стандартних варіантів диспетчера драйверів для ODBC з відкритим вихідним кодом. На січень 2004 року для UNIX є наступні варіанти:


libodbc + + і диспетчер драйверів


libodbc + + – це відкрита бібліотека класів C + +, яка дає розробникам об’єктно-орієнтована доступ до загальних джерел даних в середовищі C + +. Вона була розроблена з урахуванням стандартів, тому надає підмножина добре відомого JDBC 2.0 і працює поверх диспетчера драйверів ODBC, з якого повинна запускатися libodbc + +. З диспетчерів драйверів, як платних, так і вільних, IBM рекомендує використовувати диспетчер драйверів unixODBC і налаштувати його для роботи з libodbc + +. Інформацію про налаштування unixODBC на AIX5L можна знайти у статті IBM embraces open source: How to setup unixODBC on AIX5L. На малюнку внизу показана типова ODBC-система з libodbc + + і unixODBC в якості диспетчера драйверів.



Слід зазначити, що libodbc + + є тонким клієнтом, який знаходиться між додатком і диспетчером драйверів ODBC (unixODBC). Оскільки вона проектувалася з урахуванням стандартів ODBC, вона ніяк не впливає на продуктивність. Вона просто забезпечує об’єктно-орієнтований підхід для доступу до будь-якого загального джерела даних за допомогою драйвера ODBC. На малюнку вище показано додаток, що здійснює доступ до двох загальним джерел даних і джерела даних DB2.


Системні вимоги


Таблиця 1. Завантаження / використання – потрібно п’ять окремих команд

















Операційна система AIX 5.1 і вище
Компілятор IBM VisualAge 5.0 і вище
Диспетчер драйверів ODBC unixODBC 1.8.4 і вище
Утиліта конфігурування (./configure –version) Версія, яку видає autoconf версії 2.13
Перевірені джерела даних DB2 UDB 8.1, MySql -3.23.49 Oracle 8i.


Завантаження та збирання з вихідного коду


libodbc + + можна завантажити за цим посиланням. На момент написання цієї статті на AIX5L успішно зібрана і налаштована версія 0.2.2. Для AIX рекомендується використовувати libodbc + + версії 0.2.2 і вище. Оригінальний текст в даний час доступний в форматі gzip, tar. Це означає, що необхідно:


  1. Завантажити файл libodbc++-0.2.x.tar.gz туди, де можна створювати файли та каталоги.
  2. gunzip libodbc++-0.2.x.tar.gz. Цим створюється файл libodbc++-0.2.x.tar
  3. tar -xvf libodbc++-0.2.x.tar. Створюється вихідний код.

Для установки libodbc + + використовується GNU autoconf. Для установки з параметрами за замовчуванням потрібно запустити наступні команди:


  1. ./configure (Утиліта конфігурування середовища збірки).
  2. make
  3. make install

За замовчуванням, configure шукає GNU-компілятор для збирання libodbc++ і конфігурує збірку для установки її в /usr/local. GNU-компілятор можна завантажити за цим посиланням. Щоб побачити всі параметри конфігурації для збирання libodbc++, Потрібно запустити наступну команду:




./configure –help
 


Вимоги для збірки з допомогою VisualAge C + +


На AIX5L можна зібрати libodbc++ за допомогою компілятора VisualAge C + + (VACPP) версії 5.0 і вище. При складанні з допомогою VACPP необхідно сконфігурувати змінні середовища операційної системи і запустити утиліту конфігурації з наступними настройками:


Оточення

















CC (не обов’язково. Компілятора C + + має бути достатньо) xlc Компілятор VACPP C
CXX xlC_r Компілятор REENTRANT VACPP C + +
CXXFLAGS -O Виконати оптимізацію
-qmaxmem=-1 Необмежене використання пам’яті для оптимізації


Директиви препроцесора








HAVE_LONG_LONG VACPP підтримує long long (64bit)
ODBCXX_HAVE_ISO_CXXLIB Використовувати VACPP basic_streambuf для складання ODBC DataStreamBuf


Параметри компонування














-blibsuff:so Шукати спочатку бібліотеки з розширенням. So
-bexpall Експортувати всі глобальні символи, включаючи ті, на які немає посилань
-bh:5 Придушити видачу попереджень про дублювання символів (Duplicate Symbol Warnings)
-lpthread Скомпонувати з бібліотекою pThreads


Утиліта конфігурування (команда ./configure) Для libodbc + +











–enable-threads Зібрати thread safe бібліотеки (придатні для багатопотокових додатків)
–enable-shared Зібрати колективні бібліотеки
–sysconfdir=/etc Де шукати дані системної конфігуріраціі AIX


Команда конфігурування VACPP


Для полегшення налаштування пропонується зразок сценарію як приклад, його слід використовувати тільки для конфігурування libodbc + + з компілятором VACPP. Цей сценарій можна редагувати відповідно зі своїми завданнями і пристосувати його до конкретного середовища розробки на VACPP.




#! /bin/sh
##################################################################
# Sample Configuration Script for setting up libodbc++ build #
# with VisualAge C++ 5.0 or higher compiler. This script #
# configures libodbc++ to look for the required unixODBC #
# libraries in /unixodbc/install/build. Otherwise, it will #
# look for the Driver Mgr in the default location; /usr/local. #
# #
# As with Open Source this script is distributed in the hope #
# that it will be useful, but WITHOUT ANY WARRANTY; without even #
# the implied warranty of MERCHANTABILITY or FITNESS FOR A #
# PARTICULAR PURPOSE. #
# #
# Author: Artis Walker walkerar@us.ibm.com #
##################################################################
CC=”xlc” CXX=”xlC_r” CXXFLAGS=”-O -qmaxmem=-1 -DHAVE_LONG_LONG -DODBCXX_HAVE_ISO_CXXLIB” LDFLAGS=”-blibsuff:so -bexpall -bh:5″ LIBS=”-lpthread” ./configure –with-odbc=/unixodbc/install/build –sysconfdir=/etc –enable-threads –enable-shared


Зміни в libtool VACPP


Не секрет, що утиліта конфігурування збирає системну інформацію і використовує її для створення необхідних файлів Makefile, які використовуються для складання бібліотек libodbc + +, але це далеко не все, що вона робить. Вона створює також сценарії підтримки і відповідні файли, призначені для конкретної платформи (наприклад, AIX). У свою чергу, отримані файли Makefile використовують ці сценарій і файли в якості вхідних для правильного складання бібліотек libodbc + + під цільову платформу. Однією з створюваних утиліт є libtool. Libtool забезпечує залежну від платформи узагальнену підтримку збірки бібліотек для створення поділюваних і архівованих бібліотек. Makefile викликає libtool безпосередньо, замість використання команд ar і ld. Однак, станом на січень 2004 року, утиліта конфігурування збирає libtool неправильно при використанні VACPP, і, щоб збірка працювала, необхідно зробити такі зміни перед запуском команди make.


Потрібно відредагувати сценарій libtool і змінити наступні команди:














Номер рядка (приблизно) Команда Змінити на
50 build_old_libs=no build_old_libs=yes
185 archive_expsym_cmds=”$CC
${wl}-bM:SRE -o
$output_objdir/$soname
$libobjs $deplibs
$compiler_flags
${allow_undefined_flag}
~$AR -crlo
$objdir/$libname$release.a
$objdir/$soname”
archive_expsym_cmds=”xlC_r –
qmkshrobj -blibsuff:so -bh:5 -o
$output_objdir/$soname
$libobjs $deplibs
$compiler_flags
${allow_undefined_flag} ~$AR –
crlo
$objdir/$libname$release.a
$objdir/$soname”


Потрібно зберегти зміни і продовжити збірку libodbc + +, виконуючи наступні команди:


Як при будь збірці відкритого ПЗ, за замовчуванням результат поміщається в /usr/local або в каталог, вказаний за допомогою параметра –prefix утиліти конфігурування. Після успішної складання бібліотека та заголовні файли будуть поміщені в каталоги lib і include відповідно в зазначеному каталозі.


Відомі помилки компіляції VACPP


Якщо на цьому етапі виникнуть які-небудь помилки, це будуть незначні попередження і помилки невизначених типів C через невключених заголовних файлів. На момент написання цієї статті була помічена тільки одна помилка, яку необхідно виправити, щоб зібрати libodbc + + 0.2.2 на AIX5L за допомогою VACPP 5.0 або вище:



Перевірка можливості з’єднання з джерелом даних


Після того як всі успішно скомпілювати, може знадобитися перевірити можливість зв’язку з джерелом даних. Щоб це зробити, потрібно зайти в каталог libodbc + + SOURCE/tests, Знайти файл README і прочитати його. Там знаходяться три з п’яти утиліт, які можна використовувати для перевірки функціональності та з’єднання джерел даних:



  1. dbtest: перераховує наявні джерела даних і драйверів ODBC.
  2. db2metadata: повертає інформацію про наявні джерела даних.
  3. scroll: робить спробу вставити 1000 записів і повернути їх у вигляді прокручуваного набору даних. Перевіряє прокрутку отриманого набору даних в зворотному напрямку і можливість виконання команди Prepared Statement.

Наприклад, у випадку джерела даних на DB2, можна перевірити з’єднання з тестовою базою даних. Для джерела даних на DB2 необхідно експортувати змінну DB2INSTANCE=<instance id>, Якщо не зроблено вхід в систему під ідентифікатором екземпляра бази даних (instance id), і додати текст профілю примірника db2profile в змінні оточення.


Залежно від середовища, в якому встановлюється з’єднання, під час виконання цих тестів можуть траплятися помилки, але їх не слід лякатися. Важливо, щоб була можливість підключитися до джерела даних, і щоб це джерело даних у списку виведення dbtest був позначений як доступний. Якщо не вдається отримати з’єднання з джерелом даних або його немає в списку виведення dbtest, Необхідно знайти і усунути помилки і знову виконати тест. Зазвичай ці помилки викликані неправильним синтаксисом SQL-запитів, це можна виправити за допомогою необхідних змін в початковому тексті тестів та їх перекомпіляції. Зрештою, це ж програмне забезпечення з відкритим вихідним текстом – його можна змінити …


Приклад сценарію збірки


Цей приклад сценарію може бути використаний для складання libodbc + + версії 0.2.2 за допомогою VACPP 5.0 або вище на AIX5L. У момент написання цієї статті сценарій робить всі необхідні зміни. Можна помістити цей сценарій в верхній каталог вихідних текстів libodbc + + і запустити його.






************************************************************************
#! /bin/sh
##################################################################
# Sample Configuration Script for setting up libodbc++ build #
# with VisualAge C++ 5.0 or higher compiler. This script #
# configures libodbc++ to look for the required unixODBC #
# libraries in /unixodbc/install/build. Otherwise, it will #
# look for the Driver Mgr in the default location; /usr/local. #
# #
# As with Open Source this script is distributed in the hope #
# that it will be useful, but WITHOUT ANY WARRANTY; without even #
# the implied warranty of MERCHANTABILITY or FITNESS FOR A #
# PARTICULAR PURPOSE. #
# #
# Author: Artis Walker, IBM, walkerar@us.ibm.com #
##################################################################
CC=”xlc” CXX=”xlC_r” CXXFLAGS=”-O -qmaxmem=-1 -DHAVE_LONG_LONG -DODBCXX_HAVE_ISO_CXXLIB” LDFLAGS=”-blibsuff:so -bexpall -bh:5″ LIBS=”-lpthread” ./configure –prefix=/libodbc++/install –with-odbc=/unixodbc/install/build –sysconfdir=/etc –enable-threads –enable-shared
################################### # Розділ для модифікації libtool #
###################################
# Копіювати отриманий libtool в libtool_bkup
cp libtool libtool_bkup
# Змінити три команди
sed “s/build_old_libs=no/build_old_libs=yes/” libtool > temp1
sed “s/archive_expsym_cmds=”$CC ${wl}-bM:SRE/ archive_expsym_cmds=”xlC_r -qmkshrobj -blibsuff:so -bh:5/” temp1 > temp2
# Копіювати змінені файли назад в libtool
cp temp2 libtool
############################## # Змінити install-sh #
############################## # Копіювати отриманий install-sh в install-sh_bkup
cp install-sh install-sh_bkup
sed “s/cpprog=”${CPPROG-cp}”/cpprog=”${CPPROG-cp} -r”/” install-sh > temp1
sed “s/rmprog=”${RMPROG-rm}”/rmprog=”${RMPROG-rm} -rf”/” temp1 > temp2
# Копіювати змінений файл назад у install-sh
cp temp2 install-sh
################################################# # Змінити include / odbc + + / drivermanager.h #
#################################################
cp include/odbc++/drivermanager.h include/odbc++/drivermanager.h_bkup
echo “….. Зміна drivermanager.h”
sed -e “/^#include <odbc++/types.h>/p” -e “/^#include <odbc++/types.h>/s/<odbc++/types.h>/”errorhandler.h”/” <include/odbc++/drivermanager.h > temp1 echo “Успішно змінений drivermanager.h” # Отримати виправлене вміст
cp temp1 include/odbc++/drivermanager.h
# Видалити тимчасові файли
rm temp1 temp2
# Продовжити збірку бібліотеки libodbc + +
make
make install
************************************************************************

Резюме


Що залишилося сказати про open source такого, що ще не сказано? Виявляється, багато чого! З моменту його народження пройшло приблизно двадцять років, і немає нічого такого, чого не можна було б знайти в співтоваристві open source для вирішення виниклої проблеми, і розробка бібліотеки libodbc + +, безперечно, є доказом цього. Вона так само надійна, як і специфікація ODBC API, що є промисловим стандартом, і в той же час її ієрархія класів досить гнучка, щоб дати можливість зберегти всю виразність і стиль C + +. Немає сумнівів, що вона створена для “уперто” розробника на C + +. Вона забезпечує рівень абстракції, який дає можливість розробникам на C + + повністю розділити особливості різних СУБД і визначити типи даних, які інкапсулюють їх можливості. І той факт, що libodbc + + може бути зібрана за допомогою VACPP, не обмежує ці можливості. Навпаки, серед усього іншого ми бачили тут, як можуть бути використані переваги оптимізації компілятора VACPP, що проявляється в меншому розмірі бібліотеки.


Висновок


Ця стаття показала, як IBM підтримує співтовариство open source, надавши покрокові інструкції по налаштуванню libodbc + + на AIX5L. Крім того, наведено інструкції про те, як зібрати libodbc + + за допомогою VACPP і з використанням unixODBC в якості диспетчера драйверів. Для зручності було надано настроювальний сценарій, який може бути використаний для складання бібліотеки libodbc + +. Цей сценарій може бути виконаний в каталозі, де знаходиться вихідний текст libodbc + +. Додаткову інформацію можна отримати у статті “IBM Embraces Open Source: How to set up unixODBC on AIX5L“І в джерелах, перерахованих в розділі Ресурси.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*