C 编译vsftpd 3.0.0失败
我最近尝试编译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
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
,则会定义它们。