不能使用cgo在32位linux上“构建”

问题描述 投票:1回答:1

我正在尝试构建一个将通过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())
}

任何建议将不胜感激。

go 32-bit cgo
1个回答
2
投票

感谢JimB在评论中说得对:

您必须在交叉编译时显式启用cgo。 - JimB

具体来说,这对我有用:

CGO_ENABLED=1 GOOS=linux GOARCH=386 go build
© www.soinside.com 2019 - 2024. All rights reserved.