首页 > 解决方案 > libtool:错误:“tclsqlite.lo”不是有效的 libtool 对象

问题描述

我目前正在尝试在 raspberry-pi4 buster debian 上安装 sqlcipher,同时遵循本指南https://charlesleifer.com/blog/encrypted-sqlite-databases-with-python-and-sqlcipher/

但是,每当我使用 make 函数时,我都没有运气,因为我得到了这个错误;

./libtool --mode=compile --tag=CC gcc -DSQLITE_DEFAULT_CACHE_SIZE=-8000 -DSQLITE_SOUNDEX -DSQLITE_USE_URI -DSQLITE_HAS_CODEC -O2 -DSQLCIPHER_CRYPTO_OPENSSL -DSQLITE_OS_UNIX=1 -I. -I/home/pi/sqlcipher/src -I/home/pi/sqlcipher/ext/rtree -I/home/pi/sqlcipher/ext/icu -I/home/pi/sqlcipher/ext/fts3 -I/home/pi/sqlcipher/ext/async -I/home/pi/sqlcipher/ext/session -I/home/pi/sqlcipher/ext/userauth -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite -DNDEBUG -I/usr/local/include -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT  -DSQLITE_HAVE_ZLIB=1  -DUSE_TCL_STUBS=1 -c /home/pi/sqlcipher/src/tclsqlite.c
libtool: compile:  gcc -DSQLITE_DEFAULT_CACHE_SIZE=-8000 -DSQLITE_SOUNDEX -DSQLITE_USE_URI -DSQLITE_HAS_CODEC -O2 -DSQLCIPHER_CRYPTO_OPENSSL -DSQLITE_OS_UNIX=1 -I. -I/home/pi/sqlcipher/src -I/home/pi/sqlcipher/ext/rtree -I/home/pi/sqlcipher/ext/icu -I/home/pi/sqlcipher/ext/fts3 -I/home/pi/sqlcipher/ext/async -I/home/pi/sqlcipher/ext/session -I/home/pi/sqlcipher/ext/userauth -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite -DNDEBUG -I/usr/local/include -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT -DSQLITE_HAVE_ZLIB=1 -DUSE_TCL_STUBS=1 -c /home/pi/sqlcipher/src/tclsqlite.c -o tclsqlite.o
/home/pi/sqlcipher/src/tclsqlite.c:298:3: error: unknown type name \u2018CONST\u2019; did you mean \u2018CONST86\u2019?
   CONST char *buf,
   ^~~~~
   CONST86
/home/pi/sqlcipher/src/tclsqlite.c:371:3: error: \u2018TCL_CHANNEL_VERSION_2\u2019 undeclared here (not in a function); did you mean \u2018TCL_CHANNEL_VERSION_5\u2019?
   TCL_CHANNEL_VERSION_2,             /* version                              */
   ^~~~~~~~~~~~~~~~~~~~~
   TCL_CHANNEL_VERSION_5
/home/pi/sqlcipher/src/tclsqlite.c:374:3: error: \u2018incrblobOutput\u2019 undeclared here (not in a function); did you mean \u2018incrblobInput\u2019?
   incrblobOutput,                    /* outputProc                           */
   ^~~~~~~~~~~~~~
   incrblobInput
/home/pi/sqlcipher/src/tclsqlite.c: In function \u2018DbTraceV2Handler\u2019:
/home/pi/sqlcipher/src/tclsqlite.c:657:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
                                Tcl_NewWideIntObj((Tcl_WideInt)pStmt));
                                                  ^
/home/pi/sqlcipher/src/tclsqlite.c:672:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
                                Tcl_NewWideIntObj((Tcl_WideInt)pStmt));
                                                  ^
/home/pi/sqlcipher/src/tclsqlite.c:686:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
                                Tcl_NewWideIntObj((Tcl_WideInt)pStmt));
                                                  ^
/home/pi/sqlcipher/src/tclsqlite.c:698:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
                                Tcl_NewWideIntObj((Tcl_WideInt)db));
                                                  ^
In file included from /usr/local/include/tcl.h:2216,
                 from /home/pi/sqlcipher/src/tclsqlite.c:41:
/home/pi/sqlcipher/src/tclsqlite.c: In function \u2018DbObjCmd\u2019:
/home/pi/sqlcipher/src/tclsqlite.c:2161:14: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     subCmd = Tcl_GetStringFromObj( objv[2], 0 );
              ^
/home/pi/sqlcipher/src/tclsqlite.c:2176:16: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
                Tcl_GetStringFromObj(objv[3],0), "\" to integer", (char*)0);
                ^
/home/pi/sqlcipher/src/tclsqlite.c:2190:11: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
           Tcl_GetStringFromObj(objv[2],0), "\": must be flush or size",
           ^
/home/pi/sqlcipher/src/tclsqlite.c:2219:31: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     Tcl_DeleteCommand(interp, Tcl_GetStringFromObj(objv[0], 0));
                               ^
/home/pi/sqlcipher/src/tclsqlite.c:2238:13: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zName = Tcl_GetStringFromObj(objv[2], 0);
             ^
/home/pi/sqlcipher/src/tclsqlite.c:2327:36: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     isComplete = sqlite3_complete( Tcl_GetStringFromObj(objv[2], 0) );
                                    ^
/home/pi/sqlcipher/src/tclsqlite.c:2448:14: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
       zSep = Tcl_GetStringFromObj(objv[5], 0);
              ^
/home/pi/sqlcipher/src/tclsqlite.c:2453:15: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
       zNull = Tcl_GetStringFromObj(objv[6], 0);
               ^
/home/pi/sqlcipher/src/tclsqlite.c:2457:17: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zConflict = Tcl_GetStringFromObj(objv[2], 0);
                 ^
/home/pi/sqlcipher/src/tclsqlite.c:2458:14: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zTable = Tcl_GetStringFromObj(objv[3], 0);
              ^
/home/pi/sqlcipher/src/tclsqlite.c:2459:13: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zFile = Tcl_GetStringFromObj(objv[4], 0);
             ^
/home/pi/sqlcipher/src/tclsqlite.c:2886:13: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zName = Tcl_GetStringFromObj(objv[2], 0);
             ^
/home/pi/sqlcipher/src/tclsqlite.c: In function \u2018DbMain\u2019:
/home/pi/sqlcipher/src/tclsqlite.c:3747:12: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zArg = Tcl_GetStringFromObj(objv[1], 0);
            ^
/home/pi/sqlcipher/src/tclsqlite.c:3882:10: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
   zArg = Tcl_GetStringFromObj(objv[1], 0);
          ^
make: *** [Makefile:1078: tclsqlite.lo] Error 1

我尝试使用 make -n > cmds.sh && sh cmds.sh 命令,这是我得到的错误;

libtool: compile:  gcc -DSQLITE_DEFAULT_CACHE_SIZE=-8000 -DSQLITE_SOUNDEX -DSQLITE_USE_URI -DSQLITE_HAS_CODEC -O2 -DSQLCIPHER_CRYPTO_OPENSSL -DSQLITE_OS_UNIX=1 -I. -I/home/pi/sqlcipher/src -I/home/pi/sqlcipher/ext/rtree -I/home/pi/sqlcipher/ext/icu -I/home/pi/sqlcipher/ext/fts3 -I/home/pi/sqlcipher/ext/async -I/home/pi/sqlcipher/ext/session -I/home/pi/sqlcipher/ext/userauth -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite -DNDEBUG -I/usr/local/include -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT -DSQLITE_HAVE_ZLIB=1 -DUSE_TCL_STUBS=1 -c /home/pi/sqlcipher/src/tclsqlite.c -o tclsqlite.o
/home/pi/sqlcipher/src/tclsqlite.c:298:3: error: unknown type name \u2018CONST\u2019; did you mean \u2018CONST86\u2019?
   CONST char *buf,
   ^~~~~
   CONST86
/home/pi/sqlcipher/src/tclsqlite.c:371:3: error: \u2018TCL_CHANNEL_VERSION_2\u2019 undeclared here (not in a function); did you mean \u2018TCL_CHANNEL_VERSION_5\u2019?
   TCL_CHANNEL_VERSION_2,             /* version                              */
   ^~~~~~~~~~~~~~~~~~~~~
   TCL_CHANNEL_VERSION_5
/home/pi/sqlcipher/src/tclsqlite.c:374:3: error: \u2018incrblobOutput\u2019 undeclared here (not in a function); did you mean \u2018incrblobInput\u2019?
   incrblobOutput,                    /* outputProc                           */
   ^~~~~~~~~~~~~~
   incrblobInput
/home/pi/sqlcipher/src/tclsqlite.c: In function \u2018DbTraceV2Handler\u2019:
/home/pi/sqlcipher/src/tclsqlite.c:657:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
                                Tcl_NewWideIntObj((Tcl_WideInt)pStmt));
                                                  ^
/home/pi/sqlcipher/src/tclsqlite.c:672:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
                                Tcl_NewWideIntObj((Tcl_WideInt)pStmt));
                                                  ^
/home/pi/sqlcipher/src/tclsqlite.c:686:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
                                Tcl_NewWideIntObj((Tcl_WideInt)pStmt));
                                                  ^
/home/pi/sqlcipher/src/tclsqlite.c:698:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
                                Tcl_NewWideIntObj((Tcl_WideInt)db));
                                                  ^
In file included from /usr/local/include/tcl.h:2216,
                 from /home/pi/sqlcipher/src/tclsqlite.c:41:
/home/pi/sqlcipher/src/tclsqlite.c: In function \u2018DbObjCmd\u2019:
/home/pi/sqlcipher/src/tclsqlite.c:2161:14: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     subCmd = Tcl_GetStringFromObj( objv[2], 0 );
              ^
/home/pi/sqlcipher/src/tclsqlite.c:2176:16: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
                Tcl_GetStringFromObj(objv[3],0), "\" to integer", (char*)0);
                ^
/home/pi/sqlcipher/src/tclsqlite.c:2190:11: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
           Tcl_GetStringFromObj(objv[2],0), "\": must be flush or size",
           ^
/home/pi/sqlcipher/src/tclsqlite.c:2219:31: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     Tcl_DeleteCommand(interp, Tcl_GetStringFromObj(objv[0], 0));
                               ^
/home/pi/sqlcipher/src/tclsqlite.c:2238:13: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zName = Tcl_GetStringFromObj(objv[2], 0);
             ^
/home/pi/sqlcipher/src/tclsqlite.c:2327:36: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     isComplete = sqlite3_complete( Tcl_GetStringFromObj(objv[2], 0) );
                                    ^
/home/pi/sqlcipher/src/tclsqlite.c:2448:14: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
       zSep = Tcl_GetStringFromObj(objv[5], 0);
              ^
/home/pi/sqlcipher/src/tclsqlite.c:2453:15: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
       zNull = Tcl_GetStringFromObj(objv[6], 0);
               ^
/home/pi/sqlcipher/src/tclsqlite.c:2457:17: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zConflict = Tcl_GetStringFromObj(objv[2], 0);
                 ^
/home/pi/sqlcipher/src/tclsqlite.c:2458:14: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zTable = Tcl_GetStringFromObj(objv[3], 0);
              ^
/home/pi/sqlcipher/src/tclsqlite.c:2459:13: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zFile = Tcl_GetStringFromObj(objv[4], 0);
             ^
/home/pi/sqlcipher/src/tclsqlite.c:2886:13: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zName = Tcl_GetStringFromObj(objv[2], 0);
             ^
/home/pi/sqlcipher/src/tclsqlite.c: In function \u2018DbMain\u2019:
/home/pi/sqlcipher/src/tclsqlite.c:3747:12: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
     zArg = Tcl_GetStringFromObj(objv[1], 0);
            ^
/home/pi/sqlcipher/src/tclsqlite.c:3882:10: error: invalid type argument of unary \u2018*\u2019 (have \u2018int\u2019)
   zArg = Tcl_GetStringFromObj(objv[1], 0);
          ^
libtool:   error: 'tclsqlite.lo' is not a valid libtool object

请帮忙。

标签: pythonraspberry-pidebian-buster

解决方案


推荐阅读