如何在没有警告的情况下编译 SQLite3 for Linux?



当我为 Linux 编译 sqlite3.c 文件时,我收到了数百个这样的警告。

UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17134,5):  warning: 'SQLITE_OMIT_AUTHORIZATION' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_AUTHORIZATION
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17137,5):  warning: 'SQLITE_OMIT_AUTOINCREMENT' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_AUTOINCREMENT
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17140,5):  warning: 'SQLITE_OMIT_AUTOINIT' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_AUTOINIT
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17143,5):  warning: 'SQLITE_OMIT_AUTOMATIC_INDEX' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_AUTOMATIC_INDEX
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17146,5):  warning: 'SQLITE_OMIT_AUTORESET' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_AUTORESET
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17149,5):  warning: 'SQLITE_OMIT_AUTOVACUUM' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_AUTOVACUUM
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17152,5):  warning: 'SQLITE_OMIT_BETWEEN_OPTIMIZATION' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_BETWEEN_OPTIMIZATION
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17155,5):  warning: 'SQLITE_OMIT_BLOB_LITERAL' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_BLOB_LITERAL
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17158,5):  warning: 'SQLITE_OMIT_BTREECOUNT' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_BTREECOUNT
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17161,5):  warning: 'SQLITE_OMIT_BUILTIN_TEST' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_BUILTIN_TEST
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17164,5):  warning: 'SQLITE_OMIT_CAST' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_CAST
UATHelper: Packaging (Linux):       ^
UATHelper: Packaging (Linux):   C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17167,5):  warning: 'SQLITE_OMIT_CHECK' is not defined, evaluates to 0 [-Wundef]

有人对此有任何解决方案吗?我不确定我应该怎么做才能不出现这些错误。看起来宏显示为未定义。当我为 Windows 编译时,我绝对没有问题。

我有这三个文件(sqlite3.c,sqlite3.h和sqlite3ext.h):

https://gist.github.com/Bdoom/2956a03eb82fd21fcb279b1efcff5576
https://gist.github.com/Bdoom/0e7dd714bd626e3cdcde6443f46ac593
https://gist.github.com/Bdoom/f35a6455694db809967dd69e98d380b7

如何在没有警告的情况下编译 SQLite3 for Linux?

以下是换行的警告:

UATHelper: Packaging (Linux):
C:UserspbssuDesktopPluginsSQLite3UE4PluginSourceSQLite3UE4PluginPrivatesqlite3.c(17134,5):
warning: 'SQLITE_OMIT_AUTHORIZATION' is not defined, evaluates to 0 [-Wundef]
UATHelper: Packaging (Linux):   #if SQLITE_OMIT_AUTHORIZATION

您可能应该显示命令行。对于此警告,您有多种选择。您可以将-Wno-undef添加到CFLAGS以进行sqlite3.c

您可以将-DSQLITE_OMIT_AUTHORIZATION=0添加到CFLAGS以进行sqlite3.c

您可以打开sqlite3.c并在包含标头后添加以下内容:

#ifndef SQLITE_OMIT_AUTHORIZATION
# define SQLITE_OMIT_AUTHORIZATION 0
#endif

起泡,冲洗,重复其他定义。


评论] 我不确定 Linux C 与 Windows C 有多大区别?

C 在 Linux 和 Windows 上是相同的。实质性差异在于编译器和操作系统的 ABI。

注释] 警告不会出现在窗口中。

可能是不同的编译器。您是否在 Windows 上使用 MSVC?

注释] 这些警告会影响文件的实际性能吗?

不。任何未定义的预处理器符号(如SQLITE_OMIT_AUTHORIZATION)在数值使用时计算结果为 0。它也发生在WIndows上,但你没有意识到。

评论] 功能会中断并无法使用吗?

应该不会。

评论] 或者我可以忽略这些警告吗?

我相信你可以忽略它们。您可以使用-Wno-undef对 GCC 执行此操作。

评论]它们重要吗?

这取决于您认为重要的内容。我不认为他们是。对我来说,这只是使用标准的C语言功能。

你可以做的一件事是针对SQLite提交一个错误。他们可能会看着它说:"这很重要,因为很多人可能会经历它。我们应该在我们的源代码中修复它,这样我们就不会收到更多这样的错误报告"。

最新更新