sqlite3インストール時にtclsqlite.cでエラー
DBD::SQLiteで作成したDBを、Unixのコマンドライン上から扱う必要があり、sqlite3クライアントをインストールしました。
このとき、make で以下のエラーが発生してつまづきました。
gcc -g -O2 -DOS_UNIX=1 -DHAVE_USLEEP=1 -DHAVE_FDATASYNC=1 -I. -I../sqlite-3.3.7/src -DNDEBUG -DTHREADSAFE=0 -DSQLITE_THREAD_OVERRIDE_LOCK=-1 -DSQLITE_OMIT_CURSOR -c ../sqlite-3.3.7/src/tclsqlite.c -fPIC -DPIC -o .libs/tclsqlite.o ../sqlite-3.3.7/src/tclsqlite.c: In function `DbUpdateHandler': ../sqlite-3.3.7/src/tclsqlite.c:341: warning: passing arg 3 of `Tcl_ListObjAppendElement' makes pointer from integer without a cast ../sqlite-3.3.7/src/tclsqlite.c: In function `tclSqlFunc': ../sqlite-3.3.7/src/tclsqlite.c:427: warning: passing arg 1 of `Tcl_NewByteArrayObj' discards qualifiers from pointer target type ../sqlite-3.3.7/src/tclsqlite.c:435: warning: assignment makes pointer from integer without a cast ../sqlite-3.3.7/src/tclsqlite.c:493: `Tcl_WideInt' undeclared (first use in this function) ../sqlite-3.3.7/src/tclsqlite.c:493: (Each undeclared identifier is reported only once ../sqlite-3.3.7/src/tclsqlite.c:493: for each function it appears in.) ../sqlite-3.3.7/src/tclsqlite.c:493: parse error before `v' ../sqlite-3.3.7/src/tclsqlite.c:494: `v' undeclared (first use in this function) ../sqlite-3.3.7/src/tclsqlite.c: In function `DbObjCmd': ../sqlite-3.3.7/src/tclsqlite.c:696: warning: passing arg 3 of `Tcl_GetIndexFromObj' from incompatible pointer type ../sqlite-3.3.7/src/tclsqlite.c:1341: warning: passing arg 2 of `Tcl_GetVar2Ex' discards qualifiers from pointer target type ../sqlite-3.3.7/src/tclsqlite.c:1363: `Tcl_WideInt' undeclared (first use in this function) ../sqlite-3.3.7/src/tclsqlite.c:1363: parse error before `v' ../sqlite-3.3.7/src/tclsqlite.c:1364: `v' undeclared (first use in this function) ../sqlite-3.3.7/src/tclsqlite.c:1414: warning: passing arg 1 of `Tcl_NewByteArrayObj' discards qualifiers from pointer target type ../sqlite-3.3.7/src/tclsqlite.c:1422: warning: assignment makes pointer from integer without a cast ../sqlite-3.3.7/src/tclsqlite.c:1662: parse error before `rowid' ../sqlite-3.3.7/src/tclsqlite.c:1667: `rowid' undeclared (first use in this function) ../sqlite-3.3.7/src/tclsqlite.c:1883: warning: passing arg 3 of `Tcl_GetIndexFromObj' from incompatible pointer type ../sqlite-3.3.7/src/tclsqlite.c: In function `DbMain': ../sqlite-3.3.7/src/tclsqlite.c:2069: warning: passing arg 2 of `Tcl_CreateObjCommand' discards qualifiers from pointer target type make: *** [tclsqlite.lo] Error 1
tcl(ティクル)がよく分からないのと、必要でもないのでconfigオプションにて外してインストールしました。
分からないから放置というなんともかんともですが、うんまぁいいや。
$ wget http://www.sqlite.org/sqlite-3.3.7.tar.gz $ tar xvfz sqlite-3.3.7.tar.gz $ mkdir bld $ cd bld $ ../sqlite-3.3.7/configure --disable-tcl $ make $ sudo make install $ make clean
※ bldディレクトリを作成して、そこでconfigureってのは、ソースに同梱されていたREADMEをそのまま流用しています。
ちなみにsqliteクライアントのバージョンについて補足しておきます。
公式サイトのダウンロードページにいくと、以下の2種類があります。
- sqlite3-3.3.7
- sqlite-2.8.17
これは、以下の関連性があり、それぞれの互換性はないのでご注意あれ。
sqliteバージョン | DBD::SQLiteバージョン |
---|---|
sqlite3 | 1.0.0 以上 |
sqlite | 0.31(fix)以下 |
詳しくはChangesをご覧ください。