【问题标题】:Cannot 'go build' on 32 bit linux using cgo无法使用 cgo 在 32 位 linux 上“构建”
【发布时间】:2017-12-19 17:43:01
【问题描述】:

我正在尝试构建一个应用程序,它将通过 cgo 使用 32 位 Linux 库(64 位版本不存在)。

尝试构建为 64 位不适用于 32 位库:

[performance goListen]> go build
# goListen
/usr/bin/ld: skipping incompatible /apps/install/tibco/tibrv/live/lib/libtibrv.so when searching for -ltibrv
/usr/bin/ld: skipping incompatible /apps/install/tibco/tibrv/live/lib/libtibrv.a when searching for -ltibrv
/usr/bin/ld: cannot find -ltibrv
collect2: ld returned 1 exit status

当我尝试将其构建为 32 位时,它抱怨没有可构建的源文件:

[performance goListen]> GOARCH=386 go build
can't load package: package goListen: no buildable Go source files in /apps/sierra/shares/sierra_aps/godev/src/goListen

这是我的代码 - 我知道它不会工作,但我只是想让它尝试编译!

package main

/*
#cgo !windows CFLAGS: -I/apps/install/tibco/tibrv/live/include/tibrv
#cgo !windows LDFLAGS: -L/apps/install/tibco/tibrv/live/lib -ltibrv
#cgo windows CFLAGS: -ID:/Rendez-vous/include/tibrv
#cgo windows LDFLAGS: -LD:/Rendez-vous/lib -ltibrv
#include "tibrv.h"
*/
import "C"
import "fmt"

func main() {
    fmt.Println(C.tibrv_Open())
}

任何建议将不胜感激。

【问题讨论】:

  • 交叉编译时必须显式启用cgo。
  • 谢谢@JimB 不知道我是怎么错过的!

标签: go 32-bit cgo


【解决方案1】:

感谢在 cmets 中拥有它的 JimB:

您必须在交叉编译时显式启用 cgo。 – 吉姆B

具体来说,这对我有用:

CGO_ENABLED=1 GOOS=linux GOARCH=386 go build

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2019-10-03
    • 2013-11-14
    • 2011-03-16
    • 2012-02-16
    • 2013-08-25
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多