除了写小工具外再也不想用 Rust 了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tinybaby365
0.01D
V2EX    Rust

除了写小工具外再也不想用 Rust 了

  •  
  •   tinybaby365 41 天前 2129 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新版本完全不考虑老系统的兼容。在 Windows 上还能靠 YY-Thunks 苟延残喘。在 Linux 下 cargo zigbuild 能搞定依赖的 glibc 版本,但搞不定 aarch64 环境 glibc 缺 API 。

    10 条回复    2025-09-24 10:37:34 +08:00
    licolicoli
        1
    licolicoli  
       41 天前
    有一次想把一个小玩具迁移到 Rust ,结果做完调研发现 Rust 的编译器已经放弃 MIPS 支持了 https://github.com/rust-lang/compiler-team/issues/648 遂放弃,继续用我的 C/Go...
    hingle
        2
    hingle  
       41 天前
    我觉得 Rust 还是很好的。像楼上说的 MIPS ,只是降到 Tier 3 了,并不是不能用。

    Rust 的 Win7 支持也是 Tier 3 ,用 nightly -Zbuild-std 就能编译出 Win7 程序。
    lloovve
        3
    lloovve  
       40 天前 via iPhone
    快进到 rust 专用芯片,感觉 rust 越走越专了,钻牛角尖。
    clarkethan
        4
    clarkethan  
    40 天前
    这不是 Rust 独有的问题,凡是依赖 glibc 的语言都会遇到。C/C++ 有 manylinux ,Go 靠静态链接,Swift 用 back-deployment ,Rust 也有 musl 、cargo-zigbuild 、旧环境构建等办法。只是不同生态各有取舍,本质还是 glibc 的兼容策略所致,遇到的时候,确实可能会让新手比较难下手,搞不定的话,建议还是用自己熟悉的并且简易支持对应目标的语言去解决需求
    billzhuang
        5
    billzhuang  
       40 天前 via iPhone
    @licolicoli Linux 新内核也放弃 MIPS 了
    IamUNICODE
        6
    IamUNICODE  
       35 天前
    @billzhuang 感觉国内好多 linux 系统内核都是 mips ,尤其是嵌入式那边的,这就很麻烦了。
    tinybaby365
        7
    tinybaby365  
    OP
       35 天前
    @clarkethan C/C++编译器从头文件基本上知道用的 API 是否支持了(是否定义),不管是 native 编译还是交叉编译环境。Rust 隔了一层,在编译 exe 的时候能发现问题,但在编译 so 的时候就会出现这种情况。
    bli22ard
        8
    bli22ard  
       27 天前
    golang 的 win7 支持最后版本是 1.20 , 目前 golang 的 latest 版本是 1.25 ,都差不多吧。
    zigbuild 不是可以指定 glibc 版本吗, 难道 arm64 , 指定了 glibc 版本也不行?
    chengYT
        9
    chengYT  
       16 天前
    @bli22ard 部分库即使 zigbuild 指定了 glibc 版本还是会打进来高版本 libc 的函数依赖,也可能是我刚开始搞,没搞明白。
    tinybaby365
        10
    tinybaby365  
    OP
       15 天前
    我详细的说明一下:

    这个问题在 C/C++编译 so 时可能也会遇到,就是 so 依赖某个符号,在链接的时候这个符号找不带,编译器不会报错(ELF 中这个符号是 undefined symbol)(编译 exe 的时候会报错, 很容易发现问题)。在使用这个 so 的时候:如果实际不会调用到这个符号,没有问题;如果调用到这个符号且进程的其他模块有这个符号,没有问题;如果调用到这个符号且进程的其他模块没有这个符号,那就会报错。

    使用 C/C++开发,正常情况下(include 头文件, 不 extern),不会遇到 glibc 的 API 有声明,但链接的时候找不到的情况。正常编译和交叉编译都一样。

    现在遇到 Rust 的问题大概是这样的,它相当于是在 C/C++中用 extern 声明了某个 glibc API ,但实际上这个 API 仅在 x86_64 的环境下有,在 aarch64 的环境下是没有的(不要意外,实际情况就是这样)。其他的 glibc API 在 zigbuild 的帮助下可以指定 glibc 的版本链接好,但 aarch64 下面 glibc 没有的 API ,就和 gcc 的表现一样,不报错,实际上是 undefined symbol.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2828 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 13:33 PVG 21:33 LAX 06:33 JFK 09:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86