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

请教一些各位 ruster 是如何在源代码级别兼容 32/64 位的啊?

  •  
  •   zhwguest · 2023-02-15 14:38:33 +08:00 · 1686 次点击
    这是一个创建于 645 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我提供一个.so 中的加法器:

    32 位系统中的 c 来调用:

    int adder(int a, int b);
    

    64 位系统中的 c 来调用

    int64 adder(int64 a, int64 b);
    

    这种有办法条件编译?

    6 条回复    2023-06-10 21:08:02 +08:00
    DianQK
        1
    DianQK  
       2023-02-15 14:47:52 +08:00
    cty 中的 `c_long`?
    DsuineGP
        2
    DsuineGP  
       2023-02-15 15:50:10 +08:00
    rust 端导出 i32 i64 两个 ffi 接口
    c 端在编译期根据 target 判断调用哪个接口
    araaaa
        3
    araaaa  
       2023-02-16 12:16:37 +08:00   ❤️ 1
    用 isize usize
    proxytoworld
        4
    proxytoworld  
       2023-02-21 11:49:08 +08:00
    c 里面

    #ifdef x64_86
    int adder(int a, int b);
    #else
    int64 adder(int64 a, int64 b);

    rust 里面
    #[cfg(target_arch = "x86_64")]
    fn adder(a:i64,b:i64) -> i64
    #[cfg(target_arch = "x86")]
    fn adder(a:i32,b:i32) -> i32
    suifengdaren
        5
    suifengdaren  
       2023-02-21 14:10:30 +08:00 via Android
    isize
    dalabenba
        6
    dalabenba  
       2023-06-10 21:08:02 +08:00 via Android
    feature gate?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3417 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:49 · PVG 18:49 · LAX 02:49 · JFK 05:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.