生手提问,

因为要兼容旧的 opwerwrt 设备的 ov ,要编译一个比较老版本的 openvp openvp-2.3.2.tar ,去做 Server 端

2.3.2 不知道那年的版本了,gcc 10 编译失败,
gcc 5.6 试过了,不行,再往前走,上 4.8.5 ,

整了这个,有些迷糊了,这路还能走下去吗?

checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /usr/bin/sed
checking for gawk... no
checking for mawk... mawk
checking for libatomic support... yes
checking for libitm support... yes
checking for libsanitizer support... yes
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/root/gcc-4.8.5':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

是不是还得先上再前于 4.8.5 的版本?

还是我已经走歪路了?

建议检查一下日志,确认一下支持的编译器版本是多少

上 Docker ,或者其他容器化方案使用 Debian 8 。这种老项目依赖的一堆老的工具链,不止 GCC 一个。

日志就是提到没有 C compiler ,看 2.3.2.tar 的 README 以及一些文档,似乎确实也没提到编译器版本...

收到,经常听到 Docker ,但从来没有用过 Docker ,只知道是类似一个沙盘或者虚拟机的东西,目前不是太能理解您的意思,我是想问,我主系统是 Debian 11 ,是不是弄个 Docker ,然后装 Debian 8 在里面,在 Debian 8 虚拟环境里,再去做想做的事情?

hub.docker.com/_/gcc/tags?page=5

日志都说了没有 gcc

用 github actions, 机器都省了

建议直接 docker 搭老环境,这种类型的编译不止依赖一个老链,很多东西都有特定版本要求。

你确定你编译失败的原因是版本而不是环境没有配置对

你确定你编译失败的原因是版本而不是环境没有配置对?

经常听到 Docker ,但从来没有用过 Docker ,只知道是类似一个沙盘或者虚拟机的东西,目前不是太能理解您的意思

制作一个旧版本系统的 docker 镜像,把工程挂进 docker 容器里编译

google dockerfile

先 mark ,春节有时间就研究一下 docker ,谢谢哦~

所以我问了主贴倒数第二句话,因为前面 gcc 10 一路降下来已经 try fail 了几次,怕再降下去都无济于事,况且老的软件包,下载都很慢,有些突破不下去的感觉了。。。

能理解您意思,我这属于没事找抽,蛋疼。。。

理论上不会,看了一下 openvp*的 configure 的参数说明,似乎不会太多啰啰嗦嗦的事情

好的,谢谢,mark.

如果不想玩 docker 的话也可以从 chroot 开始玩。
docker 的好处是脚本化运行,把你手敲的编译指令变成脚本,每次只要跑脚本就可以跑编译。我们现在编译 nginx 就是全部用 dockerfile 跑,pull 下来一堆 ubuntu 和 debian 的不同发行版本(甚至还能跑 arm64 ),然后 dockerfile 里写上 apt install 和后面的编译命令,跑出来以后再把最终的二进制文件提取出来发布。

初期可以从实体机或者 chroot 开始玩,做到可复现编译以后,再把 bash_history 转写成 docker 脚本。

你为啥要 configure 一个 b/h/t 都是 x86_64-unknown-linux-gnu 的 native gcc 4.8.5 ?

按理说你用的那个 openwrt 需要交叉编译的 gcc 而不是 native 的。你最好先找一下有没有为 openwrt 的 targe 已经 tbuild 好的 gcc toolchain 试试看。

有人理我,

我就把事情前后缘由说细一些吧,但估计没人能给到可以解决的办法给我,我也是在摸石头过河走到这一步。

1 、有好几个 AR9331 芯片的设备跑着 openwrt+openvp*组网,目前暂时不更换组网方式和设备。
2 、OV 的 Server 端坏了,Server 端跑的就是 2.3.2 版本
3 、已经试过新装一个 Debian 11 + openvp 2.5 左右 apt-get 能装上的主流版本,替代原来的 openv server ,哪些 AR9331 的 OV Client 是连接不上的,原因我这里不打字说了,安全性还有 OV 自身版本匹配的问题,与证书,key 等无关,反正已经找到问题,2.5.x 对 client 的 OV 版本也很有要求。
4 、openwrt 编译固件环境我也有,支持 AR9331 最后一版本,里面所配 openvp*,也是非常古老的版本,和原来 Server 2.3.2 ,无任何问题。
5 、重新想办法含有 openvp* 2.5x 的 AR9331 的 openwrt 固件,这个也许可以,但不到最后也不去折腾,也不确定这么古老的主控芯片 MCU ,能不能跑起来。
6 、所以,发了这个帖子,

我需要一个 Debian 11 的新系统,要去跑一个非常古老版本(2.3.2)的 openvp* server

于是,我就在 Debian 11 上去编译 openvp* 2.3.2 ,Debian 11 apt-ge 安装的 gcc ,编译失败,提示代码有错,
于是降到 5.6 ,gcc --version ,还有一些软 ln ,都已经确认看到默认是指向 gcc 5.6 了,还是提示代码有错,
再降 4.8.5 ,编译 4.8.4 需要一个 c 编译器,作为一名生手,就犯糊涂了。。。。

上面笔误,最后一个应该是 4.8.5 ,不是 4.8.4

只是解决你提出的问题(如何编译 gcc4.8.5 )的话,你需要一个 gcc 才能编译 gcc ,所以你不可以把高版本的卸载。

上 2.4 的 ovpn 可否?似乎这个版本兼容性还可以。。?

尽量还是升 OpenWRT 版本吧,不要 PC 上 OpenVPN 降版。

你在 5 里提到的“也不确定这么古老的主控芯片 MCU ,能不能跑起来”倒不用担心。最新的 openwrt 官方( 22.03 )里的 ath79 target 仍然支持 AR9331 ,唯一可能的问题是同样包做出来的 image 体积比旧版大不少,旧设备的 RAM 和闪存已经跑不起来了。如果是像 GL.iNET 6416 这种近满配( 16M 闪存 / 64M RAM )的 AR9331 机子还是能跑起来的。如果实在不行,可以试试 19.07 ,里面对 Atheros SoC 还是 ar71xx/ath79 双 target 并行的,并且在低配设备上也有望跑得动。当然,你的板子的适配工作还是要做的。

git clone [email protected]:spack/spack.git
source ./spack/share/spack/setup-env.sh
spack env create gcc4
spack env activate gcc4
spack add [email protected]
spack install

然后你就可以用 gcc4.8.5 了。下次要用的时候,直接 source ./spack/share/spack/setup-env.sh ; spack env activate gcc4 ;

spack 可以自动安装所有的依赖,而且是从源码编译安装到你创建的虚拟环境。一点也不会污染系统。 findhao.net/academic/2571

代码有错误的话,跟着编译错误信息去改代码就行了

我需要一个 Debian 11 的新系统,要去跑一个非常古老版本(2.3.2)的 openvp* server

DOCKER is exactly what you need.

那都不用折腾编译了,直接制作一个含有 vpn server 的旧版系统的 docker image 就好了

这种需要用老版本特定版本的问题一律用 Docker 解决