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

2023-11-21 09:08:35 +08:00
 cheneydog

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

4762 次点击
所在节点    程序员
30 条回复
billlee
2023-11-21 13:22:35 +08:00
Java 你也可以拿 JNI 包一个
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
2023-11-21 13:48:15 +08:00
看了下 go ,支持还是不错的,应该上调, tier 1.5 - tier 2 吧,不过确实有很多点需要自己去 take care 的
xieren58
2023-11-21 14:13:04 +08:00
rust or zig... 目前推荐 rust...
alsas
2023-11-21 14:16:12 +08:00
go rust
zsxzy
2023-11-21 16:35:51 +08:00
现在 java 都可以编译为 dll
IDAEngine
2023-11-21 17:57:38 +08:00
lua 不香吗?
nagisaushio
2023-11-21 18:17:41 +08:00
@thevita 可以把 go 对象 pin 住 https://pkg.go.dev/runtime#Pinner
f14g
2023-11-21 19:41:05 +08:00
aardii
f14g
2023-11-21 19:41:17 +08:00
aardio (勘误)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/993688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX