【问题标题】:How to compile a Go application using gopacket for 32bit mips如何使用 gopacket 为 32 位 mips 编译 Go 应用程序
【发布时间】:2021-05-16 00:07:56
【问题描述】:

我正在尝试使用 gopacket 库将一个小应用程序编译到 32 位 mips cpu 上的 linux 上。不幸的是,我收到了很多这样的错误:

/home/cdutz/go/pkg/mod/github.com/google/gopacket@v1.1.19/pcap/pcap.go:30:22: undefined: pcapErrorNotActivated

在“普通”Linux 系统上,这些值似乎是在“pcap_unix.go”中定义的,而在 Windows 上,这些值来自“defs_windows_amd64.go”。我的目标系统上确实有 32 位 mips 版本的 libpcap,这很好,因为我的目标系统没有额外的空间来安装编译任何东西所需的所有工具。我知道 libpcap 在 Windows 上不作为 1 对 1 版本存在,所以这可能解释了“defs”文件。但我通常希望它具有与我的 linux 系统上的 API 相同的 API。

[更新] 因此,似乎需要确保的第一件事是执行 cgo。这是通过设置环境变量来完成的:

CGO_ENABLED=1

接下来,我们需要确保安装了与 mips 兼容的 libpcap 版本(头文件在任何架构上都是相同的)。为了在我的 Ubuntu 16.4 上执行此操作,我首先需要启用“mips”架构:

dpkg --add-architecture mips

并将 debian repo 添加到 /etc/apt/sources.list

deb [trusted=yes] http://ftp.de.debian.org/debian buster main

完成后,我可以安装 mips 二进制文件:

apt install libpcap-dev:mips libpcap0.8-dev:mips libc6-dev:mips libdbus-1-dev:mips libpcap0.8:mips

为了交叉编译,我似乎需要一个可以做到这一点的 gccgo 版本。为此我安装了:

apt-get install gccgo-mips-linux-gnu

现在出现了一些我不确定我做对了的事情,但是当使用 compiler=gccgo 运行 go build 时,它总是选择 amd64 版本并且使用除 'gccgo' 之外的任何其他东西作为编译器参数都不起作用,所以我更新了/usr/bin/gccgo 中的符号链接指向:'mips-linux-gnu-gccgo-8'(在同一目录中)。

在完成所有这些更改之后,我几乎可以使用以下命令构建所有内容:

go build -compiler=gccgo

如果我使用“-x”选项启用附加输出,我可以看到 cgo 现在正在做这件事。它还在编译所有其他模块。但是在 pcap 上它现在失败了:

cc1: error: command line option '-c' is valid for the driver but not for C

这就是我目前卡在的地方。

【问题讨论】:

    标签: go mips cross-compiling libpcap gopacket


    【解决方案1】:

    好的,3 天后,我想我设法让事情顺利进行,我会总结一下我所做的。

    最后 gccgo 路径是死胡同,所以我没有安装gccgo-mips-linux-gnu,而是安装了gcc-mips-linux-gnu

    接下来我将CC 环境变量设置为指向这个:

     export CC=/usr/bin/mips-linux-gnu-gcc-8
    

    这实际上是缺少的。

    总结一下我的 Ubuntu 16.04 系统:

    dpkg --add-architecture mips
    echo "deb [trusted=yes] http://ftp.de.debian.org/debian buster main" > /etc/apt/sources.list
    apt update
    apt install -y wget git build-essential mc
    apt install -y gcc-mips-linux-gnu
    apt install -y libpcap-dev:mips libpcap0.8-dev:mips libc6-dev:mips libdbus-1-dev:mips libpcap0.8:mips
    
    export CC=/usr/bin/mips-linux-gnu-gcc-8
    export GOOS=linux
    export GOARCH=mips   
    export GOMIPS=softfloat
    export CGO_ENABLED=1
    
    go build
    

    我希望这可能对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 2013-05-19
      • 1970-01-01
      • 2014-07-01
      • 2020-11-25
      • 1970-01-01
      • 2014-01-21
      • 2013-12-02
      • 1970-01-01
      相关资源
      最近更新 更多