最近因为甲方需求,要给其提供可断点续传的FTP客户端软件,跟银河麒麟公司联系,他们目前只有arm架构的filezilla,暂时还没有匹配3A4000下的filezilla,大概是还没有碰见这需求。无奈何,只能自己动手编译。
目前最新的filezilla的版本是3.65,根据经验判断,对于国产自主可控平台的软件移植,通常安装的软件版本,版本号越低,碰见的麻烦就会越少,斟酌之下,从网上找了个3.58版本的filezilla。
这里顺序记录正确的编译过程。
解压filiezilla-3.58源代码,其中有一个INSTALL文本文件,点开可看见其中内容。
可见依赖关系如下:
- libfilezilla 0.36.0 or greater
- wxWidgets 3.0.4 or greater of the 3.0.x branch
- libidn (only if not on Windows and not having gettaddrinfo with AI_IDN support)
- Nettle 3.1 or greater
- libdbus on *nix
- sqlite3 3.7 or greater
可见编译过程如下:
mkdir compile
cd compile
../configure
make
make install
可以使用yum list installed *XXX*
利用关键字查看依赖满足的情况,可以发现。在我的银河麒麟系统中,缺少的依赖主要是libfilezilla以及wxWidget库。按照选用可用的最低版本的原则,我下载了libfilezilla-0.36以及wxWidget-3.0.4。
安装libfilezilla库文件,需要特意去解决的依赖关系有:
libfilezilla-0.36依赖于gnutls-3.7以上版本
gnutls-3.7依赖于nettle-3.6以上版本
在这部分依赖解决过程中,比较特别的是需要解决动态链接库以及库文件安装位置写入环境变量的问题。
因为默认的源代码安装的库文件的目录通常有两个,分别是/usr/lib
以及/usr/local/lib
,其中当搜索动态库时,前者目录默认是会被搜索的,而后者目录默认不会被搜索,因此需要修改配置项,即/etc/ld.so.conf
,加入后者目录位置,修改方式如下
sudo pluma /etc/ld.so.conf
而后添加一行内容,修改为:
include /etc/ld.so.conf.d/*.conf
/usr/local/lib
保存之后,需要运行命令:
sudo ldconfig
即生效。
另外,注意!!!
通过源代码编译库文件,在每次成功编译一个动态库文件后,都需要进行sudo ldconfig
以更新动态库的链接,不然不会生效。
执行./configure
,进行依赖库文件搜索时,默认只搜索/usr/lib/pkgconfig
文件下的库文件配置信息,而/usr/local/lib/pkgconfig
文件夹不会被搜索,因此需要修改PKG_CONFIG_PATH环境变量,将/usr/local/lib/pkgconfig
写入环境变量。
pkgconfig文件夹下保存的是一堆库文件的pc文件,即该库文件的版本之类的信息。
具体的做法有两种,一种是临时添加到环境变量,即在命令行中输入:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
另一种方法是写入bashrc中,随终端启动每次都被执行。
gedit ~/.bashrc
在最后一行添加相同内容:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
在修改完上述两条之后,操作如下:
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
$ tar -xf nettle-3.6.tar.gz
$ cd nettle-3.6/
$ mkdir build
$ cd build
$ ../configure
$ make -j4
$ sudo make install
$ cd ../..
$ tar -xf gnutls-3.7.7.tar.xz
$ cd gnutls-3.7.7
$ mkdir build
$ cd build
$ ../configure --with-included-unistring
$ make -j4
$ sudo make install
$ cd ../..
$ tar -xf libfilezilla-0.36.0.tar.bz2
$ cd libfilezilla-0.36.0/
$ mkdir build
$ cd build
$ ../configure
$ make -j4
$ sudo make install
$ cd ../..
在实际编译过程中,需要特意去解决的依赖关系有:
wxWidget-3.0.4依赖于pugixml-1.12
编译过程如下:
$ unzip pugixml-1.12.zip
$ cd pugixml-1.12/
$ mkdir build
$ cd build
$ cmake ../CMakeLists.txt
$ cd ..
$ make -j4
$ sudo make install
$ cd ../..
$ tar -xf wxWidgets-3.0.4.tar.bz2
$ cd wxWidgets-3.0.4/
$ mkdir build
$ cd build
$ ../configure
$ make -j4
$ sudo make install
$ cd ../..
在解决完依赖后,安装过程如下:
$ tar -xf FileZilla_3.58.0_src.tar.bz2
$ cd filezilla-3.58.0/
$ mkdir build
$ cd build
$ ../configure --without-dbus
$ make -j4
$ sudo make install
$ cd ../..
/usr/local/lib
。/usr/local/lib/pkgconfig
。ldconfig
以写入环境变量。