高版本为什么编译不成功:linux
在版本比较高的vsftp源码中的Makefile中可能会有这么一句话:ui
LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,nowspa
如可此时交叉编译,虽然能够编译成功,但 file vsftpd 会发现,vsftpd是 shared object,而不是咱们想要的executableip
scw@scw-VB:~/buildroot-2017.02.3/dl/vsftpd-3.0.3$ file vsftpd
vsftpd: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.38, stripped源码
通过试验发现,把 ( LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,now )中的 -pie 去掉就能够编译出咱们想要的可执行文件it
scw@scw-VB:~/buildroot-2017.02.3/dl/vsftpd-3.0.3$ file vsftpd
vsftpd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.38, stripped
io
(pie :position independent executables)是安卓中的一种保护机制,而咱们如今的系统时arm板Linux,因此不须要 -pie编译
同理 :之后再移植其余软件时,如果发现此类问题,能够采起此种处理机制table
在vsftp源码中:登录
1:vsf_findlibs.sh 文件是vsftp安装包所用到的库路径指定文件
2:builddefs.h文件定义了一些必要的宏定义
3:INSTALL文件列举了必要的安装配置步骤
Step 1) Build vsftpd
Step 2) Satisfy vsftpd pre-requisites(必要步骤)
2a) useradd nobody 添加nobody用户
2b) mkdir /usr/share/empty/ 建立一个目录
2c) mkdir /var/ftp/
useradd -d /var/ftp ftp(建立匿名用户FTP)
chown root.root /var/ftp
chmod og-w /var/ftp
Step 3) Install vsftpd config file(可手动复制)
在用FTP用户登陆时,发现ls 没法显示FTP下的内容,虽然FTP用户默认的根目录是、var/tfp,但依然须要在配置文件中手动添加这么一句:anon_root=/var/ftp,而后在ls 就能够显示、var/ftp下的目录或文件。
注:在使用FTP传输数据是必定要注意所要操做的目录的权限问题。