当 GOARCH=386 with import "C" 时 Go Build Error "build constraints exclude all Go files"
Go Build Error "build constraints exclude all Go files" when GOARCH=386 with import "C"
我正在使用 CGO 包导入 C 代码,我想构建它的 x86
(386) windows 版本。我发现这应该通过设置 GOARCH=386
来完成。
它在我的默认环境设置(GOARCH=amd64)上正确构建,但是,当我将环境变量设置为“386”时,我得到错误:build constraints exclude all Go files in my file .
// hello.go
package main
/*
int CFunc() {
}
*/
import "C"
import (
"fmt"
)
func main() {
fmt.Println("Hello, Go!")
}
go.mod
module hello
go 1.16
我愿意:
go build
我得到:
C:\Users\basse\source\repos\xhptdc8_babel\go\info\hello>go build
package hello: build constraints exclude all Go files in C:\Users\basse\source\repos\xhptdc8_babel\go\info\hello
试验:
- 没有导入“C”,我没有收到任何错误。
- With // +build windows,386 或 // +build windows,386,!cgo, 在 package main 之前,我仍然得到同样的错误
所有详情见Go Issue
设置
set CGO_ENABLED=1
生成另一种类型的错误:
F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libmingwthrd.a when searching for -lmingwthrd
F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib\libmingwthrd.a when searching for -lmingwthrd
F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libmingwthrd.a when searching for -lmingwthrd
F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lmingwthrd
.
.
.
问题已解决,感谢@JimB。
在代码中,确保使用 import "C"
和正确的 CGO
directives/libraries 在代码中,例如:
/*
#cgo CFLAGS: -Wall -g -I../../../../lib/include/
#cgo 386 LDFLAGS: -L./ -l:../../../../lib/x86dummy/xhptdc8_driver
#include "xhptdc8_interface.h"
*/
import "C"
并且,在构建代码时,确保 运行 以下命令:
set GOARCH=386
set CGO_ENABLED=1
set GOGCCFLAGS=-m32
提到了详细步骤和经验教训Build Go code that uses CGO and Custom Library
我正在使用 CGO 包导入 C 代码,我想构建它的 x86
(386) windows 版本。我发现这应该通过设置 GOARCH=386
来完成。
它在我的默认环境设置(GOARCH=amd64)上正确构建,但是,当我将环境变量设置为“386”时,我得到错误:build constraints exclude all Go files in my file .
// hello.go
package main
/*
int CFunc() {
}
*/
import "C"
import (
"fmt"
)
func main() {
fmt.Println("Hello, Go!")
}
go.mod
module hello
go 1.16
我愿意:
go build
我得到:
C:\Users\basse\source\repos\xhptdc8_babel\go\info\hello>go build
package hello: build constraints exclude all Go files in C:\Users\basse\source\repos\xhptdc8_babel\go\info\hello
试验:
- 没有导入“C”,我没有收到任何错误。
- With // +build windows,386 或 // +build windows,386,!cgo, 在 package main 之前,我仍然得到同样的错误
所有详情见Go Issue
设置
set CGO_ENABLED=1
生成另一种类型的错误:
F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libmingwthrd.a when searching for -lmingwthrd
F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib\libmingwthrd.a when searching for -lmingwthrd
F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/lib/libmingwthrd.a when searching for -lmingwthrd
F:/Work/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lmingwthrd
.
.
.
问题已解决,感谢@JimB。
在代码中,确保使用 import "C"
和正确的 CGO
directives/libraries 在代码中,例如:
/*
#cgo CFLAGS: -Wall -g -I../../../../lib/include/
#cgo 386 LDFLAGS: -L./ -l:../../../../lib/x86dummy/xhptdc8_driver
#include "xhptdc8_interface.h"
*/
import "C"
并且,在构建代码时,确保 运行 以下命令:
set GOARCH=386
set CGO_ENABLED=1
set GOGCCFLAGS=-m32
提到了详细步骤和经验教训Build Go code that uses CGO and Custom Library