除了 c/c++/c# 还有什么高级编程语言可以编写动态库的? 最好支持交叉编译。
![]() | 1 danbai PRO go |
2 masellum 2023-11-21 09:12:53 +08:00 zig |
3 linauror 2023-11-21 09:12:58 +08:00 go +1 |
![]() | 4 Fris 2023-11-21 09:29:50 +08:00 rust |
![]() | 5 jasonkayzk 2023-11-21 09:29:56 +08:00 rust, crate-type = ["cdylib"] rustup 装各平台工具链交叉编译 |
![]() | 6 yekern 2023-11-21 09:38:24 +08:00 易语言 /狗头 |
7 tinyfry 2023-11-21 09:50:36 +08:00 我用的 cgo ,开发 sdk 很好用。 |
8 artnowben 2023-11-21 09:57:58 +08:00 ![]() C 是最佳选择 |
![]() | 9 cnoder 2023-11-21 10:06:12 +08:00 go 可以的,我不少 so go 写的 |
![]() | 10 wanguorui123 2023-11-21 10:25:48 +08:00 rust |
11 hez2010 2023-11-21 11:12:22 +08:00 via Android zig |
![]() | 12 saturn7 2023-11-21 11:40:36 +08:00 c |
13 realJamespond 2023-11-21 11:44:21 +08:00 vb 不能? |
14 kaedeair 2023-11-21 11:45:19 +08:00 首先得明确你这个动态链接库的调用方是谁,不是所有动态链接库都支持不同语言调用的 |
![]() | 15 gowk 2023-11-21 11:47:01 +08:00 C# |
16 hez2010 2023-11-21 11:50:44 +08:00 另外 .net 用 nativeaot 可以直接编译出动态链接库 .so/.dll/.dylib 以及静态链接库 .a/.lib 给其他程序用,所以其实除了 C# 之外,任何在 .net 上跑的支持 nativeaot 的语言都可以,比如 VB.NET 和 F# 。 |
![]() | 17 R4rvZ6agNVWr56V0 2023-11-21 12:14:56 +08:00 据我所知还有 Delphi 、VB 。 感觉你这个问题可以抽象为: https://stackoverflow.com/questions/54737429/what-programming-languages-can-one-use-to-create-shared-dynamic-libraries |
![]() | 18 jim9606 2023-11-21 12:31:41 +08:00 via Android 基本上有提供 c 绑定的语言(运行时)都能做到吧? 高级语言通常都能支持,就是难度有差异。 |
![]() | 19 cooljiang 2023-11-21 12:53:47 +08:00 python 可以转成 pyd 或者 so |
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. () |
21 billlee 2023-11-21 13:22:35 +08:00 Java 你也可以拿 JNI 包一个 |
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] |
23 thevita 2023-11-21 13:48:15 +08:00 看了下 go ,支持还是不错的,应该上调, tier 1.5 - tier 2 吧,不过确实有很多点需要自己去 take care 的 |
![]() | 24 xieren58 2023-11-21 14:13:04 +08:00 rust or zig... 目前推荐 rust... |
25 alsas 2023-11-21 14:16:12 +08:00 go rust |
![]() | 26 zsxzy 2023-11-21 16:35:51 +08:00 现在 java 都可以编译为 dll |
![]() | 27 IDAEngine 2023-11-21 17:57:38 +08:00 lua 不香吗? |
![]() | 28 nagisaushio 2023-11-21 18:17:41 +08:00 via Android @thevita 可以把 go 对象 pin 住 https://pkg.go.dev/runtime#Pinner |
![]() | 29 f14g 2023-11-21 19:41:05 +08:00 via Android aardii |
![]() | 30 f14g 2023-11-21 19:41:17 +08:00 via Android aardio (勘误) |