如何将 OpenVPN 交叉编译到旧内核

如何将 OpenVPN 交叉编译到旧内核

我正在尝试为我的 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

相关内容