在MinGW中编译SQLite3

5

我正在尝试在MinGW中构建SQLite3。 我下载了sqlite-autoconf-3071000.tar.gz,解压缩并输入以下命令:

./configure --prefix=/mingw
make && make install

当我尝试制作它时,报告了错误:
$ make && make install
C:/MinGW/msys/1.0/bin/sh.exe ./libtool --tag=CC   --mode=compile gcc 
-DPACKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\" -DPACKAGE_VERSION=\"3.7.10\" 
-DPACKAGE_STRING=\"sqlite\ 3.7.10\" -DPACKAGE_BUGREPORT=\"http://www.sqlite.org\" 
-DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\" -DVERSION=\"3.7.10\" -DSTDC_HEADERS=1 -DHAVE_
SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEM
ORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H
=1 -DHAVE_USLEEP=1 -DHAVE_DECL_STRERROR_R=0 -I.@am__isrc@    -D_REENTRANT=1 -DSQ
LITE_THREADSAFE=1  -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE -g -O2 -MT sqlite3
.lo -MD -MP -MF .deps/sqlite3.Tpo -c -o sqlite3.lo sqlite3.c
Xsqlite3.Tpo -c -o sqlite3.lo sqlite3.lo
libtool: compile: libobj name `sqlite3.Tpo -c -o sqlite3.lo sqlite3.lo' may not
contain shell special characters.
rm: invalid option -- c
Try `rm --help' for more information.
mkdir .libs
gcc "-DPACKAGE_NAME=\\sqlite\" -DPACKAGE_TARNAME=\"sqlite\" -DPACKAGE_VERSION=\
"3.7.10\" -DPACKAGE_STRING=\\sqlite 3.7.10\"" "-DPACKAGE_BUGREPORT=\\http://www.
sqlite.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\" -DVERSION=\"3.7.10\" -DSTDC
_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STR
ING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H
=1 -DHAVE_UNISTD_H=1 -DHAVE_USLEEP=1 -DHAVE_DECL_STRERROR_R=0 -I.@am__isrc@ -D_R
EENTRANT=1 -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE -g -
O2 -MT sqlite3.lo -MD -MP -MF .deps/sqlite3.Tpo -c -o sqlite3.lo sqlite3.c"  -DD
LL_EXPORT -DPIC -o .libs/sqlite3.Tpo -c -o sqlite3.lo sqlite3.o
gcc.exe: error: sqlite3.o: No such file or directory
gcc.exe: fatal error: no input files
compilation terminated.
make: *** [sqlite3.lo] Error 1

有没有人能帮我解决这个问题?非常感谢!

3个回答

4

这是一个奇怪的 MinGW/autotools/automake 等 bug,具体在哪里我不确定。

如果你列出当前工作目录(或者构建目录,甚至是整个源码树,如果我没记错)中的所有文件,那么你会找到一个名为“sqlite3.Tpo -c -o sqlite3.lo sqlite3.lo”的文件。这个名字类似于某个命令的参数列表!所以我猜问题在于 Makefile 中命令的处理错误(缺少转义或者打印错误)。

正如我们所看到的,libtool 和 gcc 抱怨非法的文件名或缺失的文件。

幸运的是,我能够通过以下方法成功地构建 sqlite:

$ make -n > cmds.sh && sh cmds.sh

希望这可以帮助你。


1

这些指示对我很有用。我正在使用使用mingw编译的sqlite3运行我的Rails应用程序。


0

其他类库(例如MPFR)也报告了同样的问题,错误信息如下:

libtool: warning: libobj name 'extract.Tpo -c -o extract.lo extract.lo' may not contain shell special characters.
rm: unknown option -- c

根据(MSYS2 bug 223)中的讨论:
引用: 所有警告和错误在从MinGW-W64中删除“make”并安装MSYS2的“make”后已经消失(使用GMP、MPFR和OpenSSL进行测试)。
所以,这应该解决这里的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接