当使用gccgo构建一个单独的go文件是可以的,但是当我构建一个大型的多定制pacage项目时,该项目有一些子包(如app/ app/core/server等)没有成功。
怎么解决这个问题?有什么帮助吗?我使用-x构建,并看到一些调试信息。
go build -x -gccgoflags -Wl,-R,/opt/gccgo/lib64/ -compiler gccgo -o bin/app main.go
错误是:
WORK=/tmp/go-build1609005358
mkdir -p $WORK/b001/
cd $WORK
/opt/gccgo/bin/gccgo -fgo-importcfg=/dev/null -c -x c - -o /dev/null || true
mkdir -p $WORK/b001/_importcfgroot_/github.com/gin-gonic
ln -s /home/liangqi1/.cache/go-build/8a/8ae3d6bb3097698b7be6547599d7a61c9c5c54cca0be55c007ca1c8386d1188c-d $WORK/b001/_importcfgroot_/github.com/gin-gonic/libgin.a
mkdir -p $WORK/b001/_importcfgroot_/github.com/logrusorgru
ln -s /home/liangqi1/.cache/go-build/6f/6fb602f3c990310188a3e921909d152810f07d50f1ab4c621ab71b87afd4942d-d $WORK/b001/_importcfgroot_/github.com/logrusorgru/libaurora.a
mkdir -p $WORK/b001/_importcfgroot_/go.uber.org
ln -s /home/liangqi1/.cache/go-build/c0/c0ac9f2f0ebb74e0997bfa1d72d21a79ce906ed736197f83402365203094c3a9-d $WORK/b001/_importcfgroot_/go.uber.org/libautomaxprocs.a
/opt/gccgo/bin/gccgo -ffile-prefix-map=a=b -c -x c - -o /dev/null || true
cd /home/liangqi1/gccgo_demo
/opt/gccgo/bin/gccgo -c -g -m64 -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches -fgo-relative-import-path=_/home/liangqi1/gccgo_demo -o $WORK/b001/_go_.o -I $WORK/b001/_importcfgroot_ -Wl,-R,/opt/gccgo/lib64/ ./main.go
# command-line-arguments
./main.go:7:23: 错误:import file ‘gccgo_demo/app’ not found
7 | "gccgo_demo/app"
| ^
./main.go:8:35: 错误:import file ‘gccgo_demo/app/core/server’ not found
8 | "gccgo_demo/app/core/server"
| ^
./main.go:24:19: 错误:reference to undefined name ‘app’
24 | if err := app.Init(prjHome); err != nil {
| ^
./main.go:29:12: 错误:reference to undefined name ‘app’
29 | if app.IsProd() {
| ^
./main.go:35:9: 错误:reference to undefined name ‘server’
35 | server.Run()
| ^
gccgo是从gcc的git克隆出来的:
gccgo (GCC) 12.0.1 20220217
go version is 1.16.4
我的项目结构像流水一样:
gccgo_demo
├── app
│ ├── app.go
│ ...
├── go.mod
├── go.sum
├── main.go
... other code
go mod名称是gccgo_demo
,所以app/app.go
有一些导入,比如gccgo_demo/app
路径。
发布于 2022-04-13 17:43:03
我没有看到您的代码,但我猜您没有传递包含路径的问题。
这个cgo工具总是在包含路径中使用源文件的目录调用C编译器;也就是说,-I${SRCDIR}总是隐含的。这意味着,如果头文件foo/bar.h同时存在于源目录和系统包含目录(或由-I标志指定的其他位置)中,则"#include “将始终优先于其他版本找到本地版本。
所以就像
go build -x -gccgoflags -I/path/to/your/file -Wl,-R,/opt/gccgo/lib64/ -compiler gccgo -o bin/app main.go
https://stackoverflow.com/questions/71841532
复制相似问题