民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS SQLiteの面白さ(7) sqlite3odbcのコンパイル方法

<<   作成日時 : 2008/05/03 00:27   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

Visual C++ 6.0でsqlite3odbcをコンパイルする方法がわかった。わかったといっても、sqliteodbc-0.77とsqlite-3.5.8の組み合わせ限定になる。また、ここまでして、手でsqlite3odbcをコンパイルしたがる人がどれだけいるかも分からないが、とりあえず自分のためのメモという意味合いも含めてここにまとめておく。


用意するもの

コンパイラ
Visual C++ 6.0

sqliteodbcのソース
sqliteodbc-0.77.tar.gz

sqliteのソース
sqlite-3.5.8.tar.gz(以下、原版と称する)

sqliteのソース2(結合版)
sqlite-amalgamation-3_5_8.zip


手順

コマンドプロンプトを呼び出す

コンパイラの環境を設定する
"C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"

sqliteodbcのソースsqliteodbc-0.77.tar.gzを展開する

sqliteodbcのソースを展開したフォルダの中に、sqlite3のソースを展開するためのフォルダを作成する(以後、sqlte3フォルダという)
ex) mkdir sqliteodbc-0.77\sqlite3

sqliteのソース2(結合版)をsqlite3フォルダに展開する

sqliteのソース(原版)を適当なフォルダ(sqliteodbcのフォルダの外)で展開し、sqlite3.defとsrcフォルダ内にあるshell.cとを取り出し、sqlite3フォルダにコピーする

sqlite3odbc.cの11700行目あたりにあるstatSpec[]の宣言
static COL statSpec[] = {
{ "SYSTEM", "STATISTICS", "TABLE_QUALIFIER", SCOL_VARCHAR, 50 },
{ "SYSTEM", "STATISTICS", "TABLE_OWNER", SCOL_VARCHAR, 50 },
{ "SYSTEM", "STATISTICS", "TABLE_NAME", SCOL_VARCHAR, 255 },
{ "SYSTEM", "STATISTICS", "NON_UNIQUE", SQL_SMALLINT, 50 },
{ "SYSTEM", "STATISTICS", "INDEX_QUALIFIER", SCOL_VARCHAR, 255 },
{ "SYSTEM", "STATISTICS", "INDEX_NAME", SCOL_VARCHAR, 255 },
{ "SYSTEM", "STATISTICS", "TYPE", SQL_SMALLINT, 50 },
{ "SYSTEM", "STATISTICS", "ORDINAL_POSITION", SQL_SMALLINT, 50 },
{ "SYSTEM", "STATISTICS", "COLUMN_NAME", SCOL_VARCHAR, 255 },
{ "SYSTEM", "STATISTICS", "ASC_OR_DESC", SCOL_CHAR, 1 },
{ "SYSTEM", "STATISTICS", "CARDINALITY", SQL_INTEGER, 50 },
{ "SYSTEM", "STATISTICS", "PAGES", SQL_INTEGER, 50 },
{ "SYSTEM", "STATISTICS", "FILTER_CONDITION", SCOL_VARCHAR, 255 }
};

を370行目あたりに移動させ、そのあたりにある
static COL statSpec[];
の宣言をコメントアウト
/* static COL statSpec[]; */
する
(この宣言方法はVC++6.0ではコンパイルエラーになるため。もっと新しいコンパイラではおそらくこの作業は不要)


SQLiteODBCInstaller.cの800行目あたりの__FUNCTION__がVisual C++ 6.0ではコンパイルエラーになるので
_snprintf( g_ErrorMessage, SQLINST_MAX_ERROR_BUFFER, "Internel error: RunUnInstaller: Can not run: %d\n", pRunData->DoFollow );
と書き換え

sqlite3odbc.makの20行目あたりのきりのいいところに
TCC = cl -Gs -GX -D_WIN32 -DOS_WIN=1 -nologo -Zi
OPTS = -DNDEBUG=1
TCCX = $(TCC) $(OPTS) -DWIN32=1 -DTHREADSAFE=1 -DOS_WIN=1 \
-DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_SOUNDEX=1 \
-DSQLITE_OMIT_LOAD_EXTENSION=1 -I. -I$(TOP)/src
TCCXD = $(TCCX) -D_DLL
と書き加え、さらに最後の部分を
sqlite3\libsqlite3.lib: fixup.exe mkopc3.exe
cd sqlite3
$(TCCXD) -c sqlite3.c
$(TCCXD) -Dmain=sqlite3_main -Daccess=_access -Disatty=_isatty -c shell.c
lib -out:libsqlite3.lib sqlite3.obj shell.obj
# nmake -f ..\sqlite3.mak
cd ..
と書き換える

また、今後のため、cleanターゲットの
cd sqlite3
nmake -f ..\sqlite3.mak clean
cd ..
となっている部分を
cd sqlite3
del *.obj
del *.pdb
del libsqlite3.lib
cd ..
と書き換える(これをやらないと、nmake -f sqlite3odbc.mak cleanとやった際にsqlite3.hが消されてしまう)


sqlite3odbc.dll他をmake
nmake -f sqlite3odbc.mak


インストール
rundll32 sqliteodbc.dll,install


アンインストール
rundll32 sqliteodbc.dll,uninstall
なのだが、これだけではWindowsのシステムフォルダにsqlite3odbc.dllが残ってしまうので、気になるならば(そしてやっていることがわかっているならば)手で削除する

以上

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
SQLiteの面白さ(7) sqlite3odbcのコンパイル方法 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる