golang plugin mac 平台下生成 .so 文件,放到 Linux 下执行时报错

2020-11-29 11:04:12 +08:00
 TOUJOURSER

我想在 mac 环境生成可以在 Linux 上运行的.so 文件:

export CGO_ENABLED=0 GOOS=linux GOARCH=amd64
go build -buildmode=plugin -o xxx.so xxx.go

但是在 linux 下运行是报错:

plugin.Open("xxx.so"): xxx.so: invalid ELF header

大佬们有没有遇到过类似的问题,求解答

3462 次点击
所在节点    Go 编程语言
19 条回复
CismonX
2020-11-29 11:22:45 +08:00
因为 macOS 下生成的可执行文件是 Mach-O 格式,而不是 ELF 格式
CismonX
2020-11-29 11:26:08 +08:00
啊,不好意思,没有看清问题内容,无视我的回答
yianing
2020-11-29 11:27:41 +08:00
file 看一下格式对不对
TOUJOURSER
2020-11-29 12:41:44 +08:00
@CismonX 上面加了补充,请问 mac 下如何 go build 生成 ELF 格式
TOUJOURSER
2020-11-29 12:42:20 +08:00
@yianing 大佬,上面加了补充
nightwitch
2020-11-29 13:06:06 +08:00
feast
2020-11-29 13:14:24 +08:00
ARCH= OS= 你宏都不定义 跨平台编译个啥?
reus
2020-11-29 13:32:56 +08:00
你如果真的用了 export CGO_ENABLED=0 GOOS=linux GOARCH=amd64
那编译出来的不会是 Mach-O 文件
而且就算你正确用了,也还是需要 gcc/clang 工具链的,相当麻烦,还是找个 linux 机器吧
12101111
2020-11-29 13:34:18 +08:00
@reus CGO_ENABLED=0 是不需要 gcc/clang 的
reus
2020-11-29 13:36:06 +08:00
raaaaaar
2020-11-29 13:43:10 +08:00
推荐直接在目标平台下编译
TypeError
2020-11-29 14:06:36 +08:00
我也感觉交叉编译很麻烦,不过 Windows 的 wsl 真爽,直接在 Linux 下编译
cmostuor
2020-11-29 14:14:23 +08:00
谷歌的 golang 团队是时候把 go 写成和 java 一样 加个 gvm 一次编译到处运行
mrowng123
2020-11-29 16:58:07 +08:00
最简单的是用 docker 编译,一身轻松。不用担心交叉编译的问题。
Jirajine
2020-11-29 17:01:16 +08:00
go 对交叉编译支持还算比较好的了,最简单的办法还是直接用目标架构 /系统的虚拟机或在线的 CI/CD 编译。
hahasong
2020-11-30 09:32:43 +08:00
别信 go 的交叉编译,就算能跑,二进制大小也比 Linux 下直接编译的大,经常有莫名的问题
abersheeran
2020-11-30 09:42:10 +08:00
用 Docker 拉一个最小镜像编译去
q569321245
2021-04-15 17:53:58 +08:00
```
我现在也遇到这样的问题 请问下当时你是怎么解决的
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -buildmode=plugin -o=release.so main.go

# command-line-arguments
/usr/local/go/pkg/tool/darwin_amd64/link: running clang failed: exit status 1
ld: unknown option: -z
clang: error: linker command failed with exit code 1 (use -v to see invocation)

```
TOUJOURSER
2021-04-17 14:00:55 +08:00
@q569321245 没解决,后来用的 docker 镜像去编译的

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

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

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

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

© 2021 V2EX