我正在尝试为我的 NAS 构建 VPN 客户端,它是带有 Linux 2.6 的 ARMv5 CPU:
Linux OSS117 2.6.22.18 #15 Wed May 25 15:23:11 CST 2011 armv5tejl GNU/Linux
编译机器是Debian 9 x86_64:
Linux dikkenek 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux
我基本上遵循了这些步骤(openssl,libzo 和 openvpn 的编译说明)运行良好,但由于内核太旧,程序拒绝在目标主机上运行:
bicou@OSS117:~$ ./openvpn
FATAL: kernel too old
Aborted
我已经根据这个答案,检索 glibc 并对其进行编译,--enable-kernel=2.6.22
效果非常好。
然后我使用以下方法修改了 OpenVPN makefile这些说明(我已经适应了在搜索文件路径时使用交叉编译器 GCC 而不是系统编译器,并且它可以工作,因为它指向/usr/lib/gcc-cross
而不是默认的/usr/lib/gcc
)但现在编译失败了,如下所示:
/usr/lib/gcc-cross/arm-linux-gnueabi/6/../../../../arm-linux-gnueabi/bin/ld: /home/bicou/dns-325-cross/bin/lib/libcrypto.a(v3_utl.o): undefined reference to symbol '__isoc99_sscanf@@GLIBC_2.7'
//usr/arm-linux-gnueabi/lib/libc.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:562: recipe for target 'openvpn' failed
make: *** [openvpn] Error 1
所以我认为我必须用专用的 glibc 重新编译 zo 和 openssl,但这也不起作用(尽管编译成功了)。
我觉得我已经非常接近实现我的目标了,但是我被困在了 link-with-glibc 步骤上。
以下是我使用的版本:
- glibc-2.25
- lzo-2.09
- openssl-1.0.2j
- openvpn-2.3.12