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

目前有什么编程语言可以开发 dll/so 动态库?

  •  1
     
  •   cheneydog · 2023-11-21 09:08:35 +08:00 · 4765 次点击
    这是一个创建于 372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    除了 c/c++/c# 还有什么高级编程语言可以编写动态库的? 最好支持交叉编译。

    30 条回复    2023-11-21 19:41:17 +08:00
    danbai
        1
    danbai  
       2023-11-21 09:09:39 +08:00 via Android
    go
    masellum
        2
    masellum  
       2023-11-21 09:12:53 +08:00
    zig
    linauror
        3
    linauror  
       2023-11-21 09:12:58 +08:00
    go +1
    Fris
        4
    Fris  
       2023-11-21 09:29:50 +08:00
    rust
    jasonkayzk
        5
    jasonkayzk  
       2023-11-21 09:29:56 +08:00
    rust, crate-type = ["cdylib"]

    rustup 装各平台工具链交叉编译
    yekern
        6
    yekern  
       2023-11-21 09:38:24 +08:00
    易语言 /狗头
    tinyfry
        7
    tinyfry  
       2023-11-21 09:50:36 +08:00
    我用的 cgo ,开发 sdk 很好用。
    artnowben
        8
    artnowben  
       2023-11-21 09:57:58 +08:00   ❤️ 2
    C 是最佳选择
    cnoder
        9
    cnoder  
       2023-11-21 10:06:12 +08:00
    go 可以的,我不少 so go 写的
    wanguorui123
        10
    wanguorui123  
       2023-11-21 10:25:48 +08:00
    rust
    hez2010
        11
    hez2010  
       2023-11-21 11:12:22 +08:00 via Android
    zig
    saturn7
        12
    saturn7  
       2023-11-21 11:40:36 +08:00
    c
    realJamespond
        13
    realJamespond  
       2023-11-21 11:44:21 +08:00
    vb 不能?
    kaedeair
        14
    kaedeair  
       2023-11-21 11:45:19 +08:00
    首先得明确你这个动态链接库的调用方是谁,不是所有动态链接库都支持不同语言调用的
    gowk
        15
    gowk  
       2023-11-21 11:47:01 +08:00
    C#
    hez2010
        16
    hez2010  
       2023-11-21 11:50:44 +08:00
    另外 .net 用 nativeaot 可以直接编译出动态链接库 .so/.dll/.dylib 以及静态链接库 .a/.lib 给其他程序用,所以其实除了 C# 之外,任何在 .net 上跑的支持 nativeaot 的语言都可以,比如 VB.NET 和 F# 。
    GeekGao
        17
    GeekGao  
       2023-11-21 12:14:56 +08:00
    jim9606
        18
    jim9606  
       2023-11-21 12:31:41 +08:00 via Android
    基本上有提供 c 绑定的语言(运行时)都能做到吧?
    高级语言通常都能支持,就是难度有差异。
    cooljiang
        19
    cooljiang  
       2023-11-21 12:53:47 +08:00
    python 可以转成 pyd 或者 so
    GPLer
        20
    GPLer  
       2023-11-21 12:54:06 +08:00 via Android
    js 可以通过转换成 c 的方式间接支持,例如 quickjs 。
    Atwood's Law: Any application that can be written in JavaScript, will eventually be written in JavaScript.
    (•‿•)
    billlee
        21
    billlee  
       2023-11-21 13:22:35 +08:00
    Java 你也可以拿 JNI 包一个
    thevita
        22
    thevita  
       2023-11-21 13:28:13 +08:00
    理论上,能完整支持 c abi 的都可以

    tier 1: rust, zig

    完整的 C ABI 支持,完全的互操作性,交叉编译支持非常好, ps: zig 还带了一个 c/c++ 的前端,配合他自己的编译器后端 可以非常方便的实现 大部分 c/c++ 代码的交叉编译,而不用自己去搞定 c/c++ 的交叉编译环境,我用过他来作为 cgo 的 c 编译器,而不用去配置 ci 的 c++ 环境,也能在 mac 直接交叉编译输出 带有 cgo 的 linux elf ,推荐

    tier 2: c/c++/pascal/ etc...

    完整的 C ABI 支持,完全的互操作性,就是交叉编译麻烦

    tier 3: go

    用得很少,看文档描述,也能实现,但因为 c abi 存在栈拷贝的开销,大家都不是很满意,而且我有些疑问:在 存在 gc 的情况下,怎么保证 go 对象 export 给 c 之后的安全性?


    tier 4: 其他

    理论上 类似 python 这种,也可用 用一个 c wrapper 包一下来实现,python code -> c-wrapper -> python code [decompressed from shared library/dll]
    thevita
        23
    thevita  
       2023-11-21 13:48:15 +08:00
    看了下 go ,支持还是不错的,应该上调, tier 1.5 - tier 2 吧,不过确实有很多点需要自己去 take care 的
    xieren58
        24
    xieren58  
       2023-11-21 14:13:04 +08:00
    rust or zig... 目前推荐 rust...
    alsas
        25
    alsas  
       2023-11-21 14:16:12 +08:00
    go rust
    zsxzy
        26
    zsxzy  
       2023-11-21 16:35:51 +08:00
    现在 java 都可以编译为 dll
    IDAEngine
        27
    IDAEngine  
       2023-11-21 17:57:38 +08:00
    lua 不香吗?
    nagisaushio
        28
    nagisaushio  
       2023-11-21 18:17:41 +08:00 via Android
    @thevita 可以把 go 对象 pin 住 https://pkg.go.dev/runtime#Pinner
    f14g
        29
    f14g  
       2023-11-21 19:41:05 +08:00 via Android
    aardii
    f14g
        30
    f14g  
       2023-11-21 19:41:17 +08:00 via Android
    aardio (勘误)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5854 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:31 · PVG 14:31 · LAX 22:31 · JFK 01:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.