2012年5月18日金曜日

soci-3.1.0 on windows build 忘備録

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 追記:うーん・・・やっぱ、ゴリゴリ書くか・・・

0 件のコメント: