вторник, 10 мая 2011 г.

C++: Xbase - библиотека прямой работы с DBF файлами. Сборка компилятором GNU GCC 4.4

     Каким бы старым формат dBase (dbf) не был, какие бы модификации не претерпевал ... он и по сей день находит применение. Как участник некоторых форумов по программированию, я не раз становился свидетелем одной и той же картины: раз-два в квартал обязательно появляется человек с вопросом "Как читать (записывать) данные из (в) файл(а) *.dbf?". Нет такой проблемы если вы пишите программы в IDE MS Visual Studio - там "дядя Билли" все предусмотрел - нужно лишь сформировать правильно строчку подключения для коннектора и все дела (подсмотреть такие строчки можно, например, тут). Но что делать, если используется другая среда разработки и нет желания использовать ODBC (особенно при написании программ для ОС Linux)?
     Остается реализовать нативный доступ к файлу (не удивляйтесь - на форумах, обычно, так и советуют, с формулировкой в духе "да я сам так 100 раз делал" :-)) либо воспользоваться готовой библиотекой.
     Прежде чем бросаться в дебри спецификации стандарта dBase (например, тут), я бы вам советовал обратить свой взор в сторону библиотек. Их не так много, а бесплатных и того меньше ;-).
     Кому не жалко $15 за одну лицензию персонального использования, либо $37 за одну пользовательскую лицензию для организаций - можете попробовать использовать библиотеку alxBASE. Честно скажу - сам не пробовал, но практически каждый день использую программу DBFNavigator (того же разработчика) построенную на этой библиотеке. Проблем в работе DBFNavigator'а не обнаружил :-).
     Тем же, кто радеет за свободно-распространяемое программное обеспечение я хотел бы предложить "пощупать" библиотеку "Xbase". Возможностей у ней, конечно, поменьше, но прочитать/записать файл в формате dBase III, dBase IV сможет. К сожалению, с 2006 года проект не развивается, поэтому не стоит делать ставку на поддержку и актуализацию (ну только если у вас нет желания сделать это) - лишь на имеющиеся возможности.
     После столь лиричного вступления, мы, собственно, и подошли к главному вопросу - компиляции библиотеки "Xbase" компилятором GNU GCC 4.4 (этот и другие компиляторы рассматривались в другом обзоре). Как вы уже догадались, суть не в компиляции GCC как таковой, а именно GCC версии 4 и выше. Сразу стоит отметить, что компилятор GNU GCC 3.5 собирает библиотеку без проблем после накладывания патчей со страницы проекта Xbase и кроме стандартных:
./configure
make
вам ничего не понадобится. Как говорится "проверено боем" при смене штатного компилятора Qt - GNU GCC с версии 3.5 на версию 4.4.
     Итак, пошаговое руководство по сборке Xbase компилятором GNU GCC 4.4 на примере ОС Windows + MinGW:

  1. скачать и установить MinGW + MSYS + msysDTK следуя инструкции на сайте проекта. Необходимо установить все три пакета - в противном случае в системе будут отсутствовать необходимые инструменты. Не забудьте перезагрузить ПК после установки всего ПО.
  2. скачать исходный код Xbase.
  3. скачать патч compilation_fix.diff.
  4. распаковать архив с исходными кодами Xbase и переименовать директорию в xbase64-3.1.2-orig (для удобства работы, лучше всего распаковать в корень диска).
  5. скопировать в директорию xbase64-3.1.2-orig патч compilation_fix.diff и наложить его на исходный текст командой:
    patch -p1 -i compilation_fix.diff
  6. отредактировать файл configure.in, изменив в нем 77 строчку с:
    GXXVER=`${CXX} -v 2>&1 | grep version | cut -d " " -f 3 -`
    на
    GXXVER=`${CXX} -v 2>&1 | grep "gcc version" | cut -d " " -f 3 -`
  7. сформировать заново файл configure программой autoconf, для этого в директории с исходным текстом необходимо выполнить команду:
    autoreconf --force
  8. выполнить:
    ./configure
    make
     Внимание: выполнение пунктов 5,7,8 подразумевается в среде MSYS.

     Либо вы можете сразу скачать архив подготовленный мною. В нем вы найдете уже пропатченные исходные коды, обновленный configure, а так же бинарный файл библиотеки.
     Любые комментарии и публикации собственных улучшений, внесенных в эту библиотеку, приветствуются. Пишите :-).

UPD. Пропатченные таким образом исходники так же собираются GCC 4.6 и 4.7 (проверено лично :-)).

Комментариев нет:

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