V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qazwsxkevin
V2EX  ›  程序员

问, Debian 11 能用上 gcc-4.8.5 吗?

  •  
  •   qazwsxkevin · 2023-01-19 15:06:16 +08:00 · 3286 次点击
    这是一个创建于 669 天前的主题,其中的信息可能已经有所发展或是发生改变。

    生手提问,
    因为要兼容旧的 opwerwrt 设备的 ov ,要编译一个比较老版本的 openvp* openvp*-2.3.2.tar ,去做 Server 端
    2.3.2 不知道那年的版本了,gcc 10 编译失败, gcc 5.6 试过了,不行,再往前走,上 4.8.5 ,
    整了这个,有些迷糊了,这路还能走下去吗?

    root@TDebian:/root/gcc-4.8.5$ ./configure
    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.
    root@TDebian:/root/gcc-4.8.5$ 
    

    是不是还得先上再前于 4.8.5 的版本?
    还是我已经走歪路了?

    26 条回复    2023-01-21 19:16:24 +08:00
    xycost233
        1
    xycost233  
       2023-01-19 15:43:17 +08:00 via iPhone   ❤️ 1
    建议检查一下日志,确认一下支持的编译器版本是多少
    springz
        2
    springz  
       2023-01-19 15:51:23 +08:00   ❤️ 1
    上 Docker ,或者其他容器化方案使用 Debian 8 。这种老项目依赖的一堆老的工具链,不止 GCC 一个。
    qazwsxkevin
        3
    qazwsxkevin  
    OP
       2023-01-19 16:10:41 +08:00
    @xycost233 日志就是提到没有 C compiler ,看 2.3.2.tar 的 README 以及一些文档,似乎确实也没提到编译器版本...

    @springz 收到,经常听到 Docker ,但从来没有用过 Docker ,只知道是类似一个沙盘或者虚拟机的东西,目前不是太能理解您的意思,我是想问,我主系统是 Debian 11 ,是不是弄个 Docker ,然后装 Debian 8 在里面,在 Debian 8 虚拟环境里,再去做想做的事情?
    ho121
        4
    ho121  
       2023-01-19 16:16:28 +08:00   ❤️ 2
    webcape233
        5
    webcape233  
       2023-01-19 18:37:22 +08:00 via iPhone   ❤️ 1
    日志都说了没有 gcc
    lc1450
        6
    lc1450  
       2023-01-19 18:49:16 +08:00   ❤️ 1
    用 github actions, 机器都省了
    LinuShen
        7
    LinuShen  
       2023-01-19 19:11:20 +08:00   ❤️ 1
    建议直接 docker 搭老环境,这种类型的编译不止依赖一个老链,很多东西都有特定版本要求。
    BrettD
        8
    BrettD  
       2023-01-19 19:43:28 +08:00 via iPhone   ❤️ 1
    你确定你编译失败的原因是版本而不是环境没有配置对
    BrettD
        9
    BrettD  
       2023-01-19 19:44:16 +08:00 via iPhone
    你确定你编译失败的原因是版本而不是环境没有配置对?
    GeruzoniAnsasu
        10
    GeruzoniAnsasu  
       2023-01-19 20:30:57 +08:00   ❤️ 1
    > 经常听到 Docker ,但从来没有用过 Docker ,只知道是类似一个沙盘或者虚拟机的东西,目前不是太能理解您的意思

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

    google `dockerfile`
    qazwsxkevin
        11
    qazwsxkevin  
    OP
       2023-01-19 20:48:53 +08:00
    @ho121 先 mark ,春节有时间就研究一下 docker ,谢谢哦~

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

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

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

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

    初期可以从实体机或者 chroot 开始玩,做到可复现编译以后,再把 bash_history 转写成 docker 脚本。
    adoal
        13
    adoal  
       2023-01-19 21:19:38 +08:00
    你为啥要 configure 一个 b/h/t 都是 x86_64-unknown-linux-gnu 的 native gcc 4.8.5 ?

    按理说你用的那个 openwrt 需要交叉编译的 gcc 而不是 native 的。你最好先找一下有没有为 openwrt 的 targe 已经 tbuild 好的 gcc toolchain 试试看。
    qazwsxkevin
        14
    qazwsxkevin  
    OP
       2023-01-19 21:53:54 +08:00
    有人理我,

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

    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 编译器,作为一名生手,就犯糊涂了。。。。

    @adoal
    qazwsxkevin
        15
    qazwsxkevin  
    OP
       2023-01-19 21:56:04 +08:00
    上面笔误,最后一个应该是 4.8.5 ,不是 4.8.4
    yso
        16
    yso  
       2023-01-19 22:37:58 +08:00 via iPhone
    只是解决你提出的问题(如何编译 gcc4.8.5 )的话,你需要一个 gcc 才能编译 gcc ,所以你不可以把高版本的卸载。
    Senorsen
        17
    Senorsen  
       2023-01-19 22:48:18 +08:00
    上 2.4 的 ovpn 可否?似乎这个版本兼容性还可以。。?
    adoal
        18
    adoal  
       2023-01-19 22:56:50 +08:00
    尽量还是升 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 并行的,并且在低配设备上也有望跑得动。当然,你的板子的适配工作还是要做的。
    FindHao
        19
    FindHao  
       2023-01-19 23:03:28 +08:00
    ```
    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 ;
    FindHao
        20
    FindHao  
       2023-01-19 23:04:33 +08:00
    spack 可以自动安装所有的依赖,而且是从源码编译安装到你创建的虚拟环境。一点也不会污染系统。https://findhao.net/academic/2571
    BrettD
        21
    BrettD  
       2023-01-19 23:45:06 +08:00 via iPhone
    代码有错误的话,跟着编译错误信息去改代码就行了
    GeruzoniAnsasu
        22
    GeruzoniAnsasu  
       2023-01-20 00:43:56 +08:00
    > 我需要一个 Debian 11 的新系统,要去跑一个非常古老版本(2.3.2)的 openvp* server

    DOCKER is exactly what you need.

    那都不用折腾编译了,直接制作一个含有 vpn server 的旧版系统的 docker image 就好了
    littlewing
        23
    littlewing  
       2023-01-20 19:02:08 +08:00
    这种需要用老版本特定版本的问题一律用 Docker 解决
    vivisidea
        24
    vivisidea  
       2023-01-21 12:44:12 +08:00
    看看 docker 吧,现在资料都很全了,google 搜下就有了,有点概念需要学习下而已,docker 操作本身并不难,而且可能已经有人把你需要的镜像制作好了

    学会了 docker 不光是这次编译问题,以后的类似的编译问题都能参考解决,不亏的
    ysc3839
        25
    ysc3839  
       2023-01-21 19:15:12 +08:00 via Android
    你需要用 OpenWrt 的 SDK 来编译,手动编译会非常麻烦
    ysc3839
        26
    ysc3839  
       2023-01-21 19:16:24 +08:00 via Android
    @ysc3839 看上去是我理解错了,你不需要动 OpenWrt ,那直接用 Docker 就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:42 · PVG 04:42 · LAX 12:42 · JFK 15:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.