SOCI 一部、boost::geometry のサンプルにも使われています。SQL-Client 接続のライブラリです。
個別のライブラリでゴリゴリ書くのが、だんだんと面倒くさくなってきたし、ビルドが cmake に移行してきたので、コンパイルに挑戦してみようかなぁと。
まず、soci-3.1.0 ディレクトリに移動して、
C:\Downloads\soci-3.1.0> mkdir build
と、build ディレクトリを作成します。
今回は、sqlite3, postgresql, odbc をターゲットに構築してみました。sqlite3 や postgresql のライブラリの構築は、ここでは扱いません。
以下のような build.bat を作成しました。
cd build
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ^
-DWITH_SQLITE3=ON ^
-DSQLITE3_INCLUDE_DIR=c:/libs/sqlite3/include ^
-DSQLITE3_LIBRARIES=c:/libs/sqlite3/lib ^
-DSQLITE3_LIBRARY=c:/libs/sqlite3/lib/sqlite3.lib ^
-DSQLITE_INCLUDE_DIR=c:/libs/sqlite3/include ^
-DSQLITE_LIBRARIES=c:/libs/sqlite3/lib ^
-DSQLITE_LIBRARY=c:/libs/sqlite3/lib/sqlite3.lib ^
-DWITH_ODBC=ON ^
-DWITH_POSTGRESQL=ON ^
-DPOSTGRESQL_INCLUDE_DIR=C:/libs/postgres/include ^
-DPOSTGRESQL_LIBRARIES=C:/libs/postgres/lib/libpq.lib ^
-DBOOST_RELEASE_VERSION=1.49.0 ^
-DBOOST_INCLUDE_DIR=C:/downloads/boost-1_49_0 ^
-DBOOST_LIBRARIES=C:/downloads/boost-1_49_0/stage/lib
cd ..
変な ^ マークは、バッチファイルを複数行連結させる時のおまじないです。linux 系では \ に相当します。
ドキュメントには、SQLITE_INCLUDE_DIR, SQLITE_LIBRARIES を設定しろと書いていますが、間違ってます。
SQLITE3_INCLUDE_DIR が正しく、同様に SQLITE3_LIBRARIES かと思いきや CMakeFiles.txt 中で SQLITE3_LIBRARY から SQLITE3_LIBRARIES が思い切り上書きされています。ですので、SQLITE3_LIBRARY に sqlite3 の lib
ディレクトリファイルを指定します。
postgresql も libpq.lib を指定します。
初期ポストで、ここに示していた修正は間違っていたので消去しました
windows だと、リンクに失敗しますので、soci-3.1.0/backends/soci-postgresql.h を修正します。
...
#ifndef SOCI_POSTGRESQL_H_INCLUDED
#define SOCI_POSTGRESQL_H_INCLUDED
#ifdef _WIN32
# ifdef SOCI_DLL
# ifdef SOCI_POSTGRESQL_SOURCE
# define SOCI_POSTGRESQL_DECL __declspec(dllexport)
# else
# define SOCI_POSTGRESQL_DECL __declspec(dllimport)
# endif // SOCI_POSTGRESQL_SOURCE
# endif // SOCI_DLL
// ここの2行を追加します。
#pragma comment( lib, "ws2_32.lib")
#pragma comment( lib, "secur32.lib")
#endif // _WIN32
//
// If SOCI_POSTGRESQL_DECL isn't defined yet define it now
...
それでは、準備が整いましたので、soci-3.1.0 のディレクトリに移動して
C:\Downloads\soci-3.1.0> build
C:\Downloads\soci-3.1.0> cd build
C:\Downloads\soci-3.1.0\build> nmake
以上で完了です。
今回、spatialite は使用しませんでした。
インストールは、管理者権限で nmake install です。
2012/05/18 追記:どうも、うまくコンパイルできていないくさい・・・ backends/*/CMakelists.txt の変更が間違ってると思われるので削除。
2012/05/18 追記:修正して追記。
2012/05/18 追記:同じ所で、ひっかかった。
http://www.mail-archive.com/soci-users@lists.sourceforge.net/msg00931.html
2012/05/18 追記:うーん・・・やっぱ、ゴリゴリ書くか・・・