当我为 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提交一个错误。他们可能会看着它说:"这很重要,因为很多人可能会经历它。我们应该在我们的源代码中修复它,这样我们就不会收到更多这样的错误报告"。