На счет ibpp
Я собирал ibpp как под Linux так и для FreeBSD. Что бы собиралось под
FreeBSD нужно модифицировать ibpp.h. Об этом позднее. Для более
удобного использования создадим динамическую и статическую библиотеку.
Для начала необходимо убедиться, что у нас установлены хедеры и
библиотеки Firebird.
Копируем содержимое папки core в рабочий каталог, в котором будем
осуществлять сборку. Создаем Makefile со следующим содержимым.
==================== Начало Makefile =============================
#-----------------------------------------------------------------
# This Makefile for build static and dynamic library for IBPP
#-----------------------------------------------------------------
DESTDIR=
LIB_PATH=/usr/lib
INC_PATH=/usr/include
INSTALL=install
OBJS=_ibpp.o _dpb.o _ibs.o _rb.o _spb.o _tpb.o array.o blob.o \
database.o dbkey.o events.o exception.o service.o row.o statement.o \
transaction.o date.o time.o user.o
STAT_LIBRARY=libibpp.a
DYN_LIBRARY=libibpp.so
ifeq ($(shell uname),FreeBSD)
CXXFLAGS =-DIBPP_FREEBSD
CXXFLAGS+=-W -Wall -fPIC
CXXFLAGS+= -O3
endif
ifeq ($(shell uname),Linux)
CXXFLAGS =-DIBPP_FREEBSD
CXXFLAGS+=-W -Wall -fPIC
CXXFLAGS+= -O3
endif
IBPP_INC=ibpp.h
.PHONY: all install clean
all: $(STAT_LIBRARY) $(DYN_LIBRARY)
$(STAT_LIBRARY): $(OBJS)
ar ru $@ $^
ranlib $@
$(DYN_LIBRARY): $(OBJS)
$(CXX) -shared -fPIC $(LDFLAGS) -o $@ $^
install:
mkdir -p $(DESTDIR)$(LIB_PATH)
mkdir -p $(DESTDIR)$(INC_PATH)
$(INSTALL) -o 0 -g 0 -m 755 $(DYN_LIBRARY) $(DESTDIR)$
(LIB_PATH)/$(DYN_LIBRARY)
$(INSTALL) -o 0 -g 0 -m 644 $(STAT_LIBRARY) $(DESTDIR)$
(LIB_PATH)/$(STAT_LIBRARY)
$(INSTALL) -o 0 -g 0 -m 644 $(IBPP_INC) $(DESTDIR)$(INC_PATH)/$
(IBPP_INC)
clean:
$(RM) *.o
$(RM) libibpp.a libibpp.so
========================= Конец Makefile
===============================================
Да еще один момент. При этом подразумевается, что библиотеки Firebird
и заголовки файлов находятся в стандартных каталогах. Если нет, самое
простое - создать символические ссылки.
Набираем make. Если сборка прошла успешно, make install. Синтаксис
Makefile написан именно для GNU make (gmake во FreeBSD).
Для сборки в FreeBSD необходимо подредактировать ibpp.h
Вот patch:
=================== начало ibpp.patch
===========================================
43c43
< // Select the platform: IBPP_WINDOWS | IBPP_LINUX |
IBPP_DARWIN^M
---
> // Select the platform: IBPP_WINDOWS | IBPP_LINUX | IBPP_DARWIN |
> IBPP_FREEBSD^M
50,51c50,51
< #if !defined(IBPP_WINDOWS) && !defined(IBPP_LINUX) && !
defined(IBPP_DARWIN)^M
< #error Please define IBPP_WINDOWS/IBPP_LINUX/IBPP_DARWIN before
compiling !^M
---
> #if !defined(IBPP_WINDOWS) && !defined(IBPP_LINUX) && !defined(IBPP_DARWIN)
> && !defined(IBPP_FREEBSD)^M
> #error Please define IBPP_WINDOWS/IBPP_LINUX/IBPP_DARWIN/IBPP_FREEBSD before
> compiling !^M
59c59
< #if defined(IBPP_LINUX) || defined(IBPP_DARWIN)^M
---
> #if defined(IBPP_LINUX) || defined(IBPP_DARWIN) || defined(IBPP_FREEBSD)^M
======================= конец ibpp.patch
==========================================
накладываем патч.
patch -p0 < ibpp.patch
Указываем ibpp.h для патча.
File to patch: ibpp.h
Все. Теперь можно делать сборку и под FreeBSD.
Далее набираем gmake. Если сборка прошла без ошибок gmake install.
Пробуем создать тестовое соединение.
================ начало test1.cpp =========================
test01.cpp [----] 0 L:[ 1+ 0 1/ 20] *(0 / 313b)= # 35
0x23
#include <iostream>
#include <ibpp.h>
using namespace std;
int main()
{
try
{
IBPP::Database db = IBPP::DatabaseFactory("localhost",
"employee", "SYSDBA", "masterkey");
db->Connect();
// other code
db->Disconnect();
}
catch (IBPP::Exception& e)
{
cout << e.ErrorMessage();
}
return 0;
}
================ конец test1.cpp ===========================
Собираем test.cpp
g++ -o test1 test1.cpp -L/usr/local/lib -lfbclient -libpp -DIBPP_LINUX
(для Linux)
g++ -o test1 test1.cpp -L/usr/local/lib -lfbclient -libpp -
DIBPP_FREEBSD (для FreeBSD).
Пробуем запустить
./test1