Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
C 编译vsftpd 3.0.0失败_C_Linux_Ftp_Makefile_Vsftpd - Fatal编程技术网

C 编译vsftpd 3.0.0失败

C 编译vsftpd 3.0.0失败,c,linux,ftp,makefile,vsftpd,C,Linux,Ftp,Makefile,Vsftpd,我最近尝试编译vsftpd 3.0.0,但由于以下编译错误而失败: gcc -c seccompsandbox.c -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wall -W - Wshadow -Werror -Wformat-security -D_FORTIFY_SOURCE=2 -idirafter dummyinc seccompsandbox.c:63: error: ‘O_DIRECTO

我最近尝试编译vsftpd 3.0.0,但由于以下编译错误而失败:

gcc -c seccompsandbox.c -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wall -W -               Wshadow -Werror -Wformat-security -D_FORTIFY_SOURCE=2  -idirafter dummyinc
seccompsandbox.c:63: error: ‘O_DIRECTORY’ undeclared here (not in a function)
seccompsandbox.c:63: error: ‘O_CLOEXEC’ undeclared here (not in a function)
make: *** [seccompsandbox.o] Error 1
因为我不太熟悉源代码和环境,所以我不知道如何解决这个问题。我想这与新的seccomp过滤器沙箱有关。在谷歌上的搜索显示,错误是可以重现的,但没有提交解决方案

我的linux内核版本是
2.6.32-5-amd64
,我使用的是gcc版本
4.4.5(Debian 4.4.5-8)

欢迎任何意见。
(如果您需要更多信息,请随时询问)

我使用的是SLES 11 sp1 64位、内核2.6.32、gcc版本4.3.4;更改或删除FORTIFY_源没有任何区别,得到相同的错误。我不是c程序员-标志O_DIRECTORY和O_CLOEXEC在seccompsandbox.c中:

static const int kOpenFlags =
    O_CREAT|O_EXCL|O_APPEND|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_LARGEFILE;
如果你删除它们,它就会编译,但这确实让我充满信心

vrf_findlibs.sh也坏了,我不得不重新调整脚本,让它先找到64位版本的libcap,或者继续选择32位副本(-lcap也不起作用,说找不到):


我使用的是SLES 11 sp1 64位,内核2.6.32,gcc版本4.3.4;更改或删除FORTIFY_源没有任何区别,得到相同的错误。我不是c程序员-标志O_DIRECTORY和O_CLOEXEC在seccompsandbox.c中:

static const int kOpenFlags =
    O_CREAT|O_EXCL|O_APPEND|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_LARGEFILE;
如果你删除它们,它就会编译,但这确实让我充满信心

vrf_findlibs.sh也坏了,我不得不重新调整脚本,让它先找到64位版本的libcap,或者继续选择32位副本(-lcap也不起作用,说找不到):


仅当定义了
\u GNU\u SOURCE
时,才定义Debian上的至少一个
O\u目录
O\u CLOEXEC

虽然在当前的
vsftp
版本中为某些模块设置了
\u GNU\u SOURCE
,但通常未设置

作为解决方法,您可以使用以下修补程序:

diff -Naur vsftpd-3.0.0.orig/seccompsandbox.c vsftpd-3.0.0/seccompsandbox.c
--- vsftpd-3.0.0.orig/seccompsandbox.c       2012-04-05 00:41:51.000000000 +0200
+++ vsftpd-3.0.0/seccompsandbox.c  2012-06-30 15:25:52.000000000 +0200
@@ -11,7 +11,7 @@
 #include "seccompsandbox.h"

 #if defined(__linux__) && defined(__x86_64__)
-
+#define _GNU_SOURCE
 #include "session.h"
 #include "sysutil.h"
 #include "tunables.h

免责声明:应用此修补程序可编译当前的
vsftp
发行版,我现在知道所创建的二进制文件是否正常工作。

至少在Debian上
O_目录
O_CLOEXEC
只有在定义了
\u GNU_SOURCE
的情况下才定义

虽然在当前的
vsftp
版本中为某些模块设置了
\u GNU\u SOURCE
,但通常未设置

作为解决方法,您可以使用以下修补程序:

diff -Naur vsftpd-3.0.0.orig/seccompsandbox.c vsftpd-3.0.0/seccompsandbox.c
--- vsftpd-3.0.0.orig/seccompsandbox.c       2012-04-05 00:41:51.000000000 +0200
+++ vsftpd-3.0.0/seccompsandbox.c  2012-06-30 15:25:52.000000000 +0200
@@ -11,7 +11,7 @@
 #include "seccompsandbox.h"

 #if defined(__linux__) && defined(__x86_64__)
-
+#define _GNU_SOURCE
 #include "session.h"
 #include "sysutil.h"
 #include "tunables.h


免责声明:应用此修补程序可编译当前的
vsftp
发行版,我现在知道创建的二进制文件是否正常工作。

关于这一点,但听起来你缺少了一个标题和/或特性测试宏,而这些宏是使这些定义可用的。你能澄清一下为什么这是离题的吗?在我看来,这个项目与软件开发有关,因为它是一个编译错误,因此显然不是OT。您的内核和编译器版本是什么?我可以毫无问题地编译vsftpd。如果我今天下班回来,我会试试。这是离题的,但听起来你缺少了使这些定义可用所需的标题和/或功能测试宏…你能澄清一下为什么这是离题的吗?在我看来,这个项目与软件开发有关,因为它是一个编译错误,因此显然不是OT。您的内核和编译器版本是什么?我可以毫无问题地编译vsftpd。如果我今天下班回来,我会试试。这对我来说很有效,但由于我将在一台实时服务器上使用vsftpd,我似乎必须进一步深入研究。不过,谢谢你,不客气。您运行live server的平台是什么?我的live server运行的是debian(具体版本在我的问题中)。该错误已报告给bugs.debian.org,其名称为#680554@MythliOn我有一个旧的Ubuntu9.10系统,如果设置了
\uuuu USE\uGNU
,它们就会被定义。在Ubuntu12.10系统上,如果设置了
\uuu USE\uxopen2k8
,它们就会被定义。这对我来说是可行的,但由于我将在实时服务器上使用vsftpd,我似乎必须进一步深入研究。不过,谢谢你,不客气。您运行live server的平台是什么?我的live server运行的是debian(具体版本在我的问题中)。该错误已报告给bugs.debian.org,其名称为#680554@MythliOn我有一个旧的Ubuntu9.10系统,如果设置了
\uuuu USE\uGNU
,它们就会被定义。在Ubuntu12.10系统上,如果设置了
\uuuuuuuuuuuuuxopen2k8
,则会定义它们。