golang plugin mac 平台下生成 .so 文件,放到 Linux 下执行时报错 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
TOUJOURSER
0.22D
V2EX    Go 编程语言

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

  •  
  •   TOUJOURSER 2020-11-29 11:04:12 +08:00 3803 次点击
    这是一个创建于 1787 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想在 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 

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

    第 1 条附言    2020-11-29 12:39:27 +08:00
    ```
    $ file xxx_linux.so # 这是 linux 生成的.so 文件
    ping_linux.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=8eef12754e3ad8168d0355effba67bb5e685f6d6, not stripped

    $ file xxx_mac.so # 这是 mac 生成的.so 文件
    ping_mac.so: Mach-O 64-bit dynamically linked shared library

    ```
    mac 下如何 go build 出 ELF 格式的文件
    19 条回复    2021-04-17 14:00:55 +08:00
    CismonX
        1
    CismonX  
       2020-11-29 11:22:45 +08:00 via iPhone
    因为 macOS 下生成的可执行文件是 Mach-O 格式,而不是 ELF 格式
    CismonX
        2
    CismonX  
       2020-11-29 11:26:08 +08:00 via iPhone
    啊,不好意思,没有看清问题内容,无视我的回答
    yianing
        3
    yianing  
       2020-11-29 11:27:41 +08:00 via Android
    file 看一下格式对不对
    TOUJOURSER
        4
    TOUJOURSER  
    OP
       2020-11-29 12:41:44 +08:00
    @CismonX 上面加了补充,请问 mac 下如何 go build 生成 ELF 格式
    TOUJOURSER
        5
    TOUJOURSER  
    OP
       2020-11-29 12:42:20 +08:00
    @yianing 大佬,上面加了补充
    feast
        7
    feast  
       2020-11-29 13:14:24 +08:00
    ARCH= OS= 你宏都不定义 跨平台编译个啥?
    reus
        8
    reus  
       2020-11-29 13:32:56 +08:00
    你如果真的用了 export CGO_ENABLED=0 GOOS=linux GOARCH=amd64
    那编译出来的不会是 Mach-O 文件
    而且就算你正确用了,也还是需要 gcc/clang 工具链的,相当麻烦,还是找个 linux 机器吧
    12101111
        9
    12101111  
       2020-11-29 13:34:18 +08:00
    @reus CGO_ENABLED=0 是不需要 gcc/clang 的
    reus
        10
    reus  
       2020-11-29 13:36:06 +08:00
    raaaaaar
        11
    raaaaaar  
       2020-11-29 13:43:10 +08:00 via Android
    推荐直接在目标平台下编译
    TypeError
        12
    TypeError  
       2020-11-29 14:06:36 +08:00 via Android
    我也感觉交叉编译很麻烦,不过 Windows 的 wsl 真爽,直接在 Linux 下编译
    cmostuor
        13
    cmostuor  
       2020-11-29 14:14:23 +08:00
    谷歌的 golang 团队是时候把 go 写成和 java 一样 加个 gvm 一次编译到处运行
    mrowng123
        14
    mrowng123  
       2020-11-29 16:58:07 +08:00
    最简单的是用 docker 编译,一身轻松。不用担心交叉编译的问题。
    Jirajine
        15
    Jirajine  
       2020-11-29 17:01:16 +08:00 via Android
    go 对交叉编译支持还算比较好的了,最简单的办法还是直接用目标架构 /系统的虚拟机或在线的 CI/CD 编译。
    hahasong
        16
    hahasong  
       2020-11-30 09:32:43 +08:00 via iPhone
    别信 go 的交叉编译,就算能跑,二进制大小也比 Linux 下直接编译的大,经常有莫名的问题
    abersheeran
        17
    abersheeran  
       2020-11-30 09:42:10 +08:00
    用 Docker 拉一个最小镜像编译去
    q569321245
        18
    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
        19
    TOUJOURSER  
    OP
       2021-04-17 14:00:55 +08:00
    @q569321245 没解决,后来用的 docker 镜像去编译的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     941 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 20:28 PVG 04:28 LAX 13:28 JFK 16:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86