Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite 3.7.17 FreeBSD下的编译错误_Sqlite_Gcc_Freebsd - Fatal编程技术网

sqlite 3.7.17 FreeBSD下的编译错误

sqlite 3.7.17 FreeBSD下的编译错误,sqlite,gcc,freebsd,Sqlite,Gcc,Freebsd,StackOverflow的许多用户建议我迁移到SQlite,所以,我正在尝试,但无法在FreeBSD下编译sqlite3源代码。出现以下错误: sqlite3.c:23527:错误:“fchmod”未在此处声明(不在函数中) 系统: FreeBSD 8.2-RELEASE gcc 4.2.1 有人能提供意见或建议吗 另外,我无法更新系统,因为它是一个正常工作的服务器。Yasir是正确的,您应该使用您需要的所有已移植软件的端口。如果您不是自己管理服务器,您应该能够要求管理员为您安装databas

StackOverflow的许多用户建议我迁移到SQlite,所以,我正在尝试,但无法在FreeBSD下编译sqlite3源代码。出现以下错误:

sqlite3.c:23527:错误:“fchmod”未在此处声明(不在函数中)

系统:

FreeBSD 8.2-RELEASE
gcc 4.2.1

有人能提供意见或建议吗


另外,我无法更新系统,因为它是一个正常工作的服务器。

Yasir是正确的,您应该使用您需要的所有已移植软件的端口。如果您不是自己管理服务器,您应该能够要求管理员为您安装databases/sqlite3端口

回到您的实际问题,很难知道为什么在您的案例中没有声明fchmod——它是在
中声明的。也许,您正在使用在一个平台(Linux?)上生成的Makefile在另一个平台(FreeBSD)上构建sqlite?您不应该这样做——配置需要在本地运行


但是,再次强调,不要自己建造它…

man fchmod
显示:

NAME
     chmod, fchmod, lchmod — change mode of file

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <sys/stat.h>
名称
chmod、fchmod、lchmod-更改文件模式
图书馆
标准C库(libc,-lc)
提要
#包括

因此,您至少需要将
#include
添加到失败文件(
sqlite3.c
)的顶部。可能有更好的头文件来包含它。您甚至可能会发现它已经存在了,但是被一个
#ifdef
隔离了,在
SCO OpenServer 5.0.7
上为
sqlite3 3.33.0
解决了这个相同的构建错误(不同的行号)之后,a修复所涉及的代码片段就在OpenBSD上提到
fchmod()的注释附近。假定
FreeBSD
可能类似于
OpenBSD
,可能是因为没有定义
\XOPEN\u SOURCE

/*
** We need to define _XOPEN_SOURCE as follows in order to enable
** recursive mutexes on most Unix systems and fchmod() on OpenBSD.
** But _XOPEN_SOURCE define causes problems for Mac OS X, so omit
** it.
*/
#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__)
#  define _XOPEN_SOURCE 600
#endif
在合并源中,代码位于
sqliteInt.h
,介于

/************** End of sqliteLimit.h *****************************************/
/************** Continuing where we left off in sqliteInt.h ******************/

使用
OpenBSD
源代码的建议是有效的,因为这些源代码将被修补以解决特定于平台的构建问题。这个答案提供了一个可能的根本原因的潜在链接,因为这个Q/a是在一个搜索中出现的,涉及到解决一个与问题中几乎相同的错误消息

SCO OpenServer 5.0.7
案例中,与此问题无关,但由于此答案中提到了它,并且可能会在其他人的搜索结果中出现,因此在我的案例中,问题是相反的情况,
\u XOPEN\u SOURCE
导致了错误,并需要一个如下补丁:

$ diff -u sqlite3.c.orig sqlite3.c
--- sqlite3.c.orig      2020-08-14 08:42:52.000000000 -0500
+++ sqlite3.c   2020-10-25 13:38:01.000000000 -0500
@@ -13633,10 +13633,11 @@
 /*
 ** We need to define _XOPEN_SOURCE as follows in order to enable
 ** recursive mutexes on most Unix systems and fchmod() on OpenBSD.
-** But _XOPEN_SOURCE define causes problems for Mac OS X, so omit
-** it.
+** But _XOPEN_SOURCE define causes problems for Mac OS X, and for
+** SCO OpenServer 5.0.7, so omit it.
 */
-#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__)
+#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) \
+ && !defined(_SCO_DS)
 #  define _XOPEN_SOURCE 600
 #endif

编辑:对于此版本的
sqlite
,包含
的建议很可能是当时的最佳修复方案。对错误消息进行详细搜索,查找此问题原始时间范围内的活动,发现许多其他用户有相同的问题,并得到相同的建议,即在
sqlite3.c
mergalization文件中更高的位置合并include语句。

,到目前为止,FreeBSD社区维护的SQLite的最新版本是3.7.14.1。那么,如果可以通过以下途径获得,为什么还要手动编译它呢?在FreeBSD中,通常不鼓励手动编译,因为您必须手动解析依赖关系。@Yasirrassanukaev我想将我的程序编译成SQLite。1) 在其他机器上设置、部署和维护此类编译非常简单2)不依赖于系统,只需要编译源代码。
$ diff -u sqlite3.c.orig sqlite3.c
--- sqlite3.c.orig      2020-08-14 08:42:52.000000000 -0500
+++ sqlite3.c   2020-10-25 13:38:01.000000000 -0500
@@ -13633,10 +13633,11 @@
 /*
 ** We need to define _XOPEN_SOURCE as follows in order to enable
 ** recursive mutexes on most Unix systems and fchmod() on OpenBSD.
-** But _XOPEN_SOURCE define causes problems for Mac OS X, so omit
-** it.
+** But _XOPEN_SOURCE define causes problems for Mac OS X, and for
+** SCO OpenServer 5.0.7, so omit it.
 */
-#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__)
+#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) \
+ && !defined(_SCO_DS)
 #  define _XOPEN_SOURCE 600
 #endif