首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gccgo构建无法找到自定义pakage。

gccgo构建无法找到自定义pakage。
EN

Stack Overflow用户
提问于 2022-04-12 11:05:34
回答 1查看 56关注 0票数 0

当使用gccgo构建一个单独的go文件是可以的,但是当我构建一个大型的多定制pacage项目时,该项目有一些子包(如app/ app/core/server等)没有成功。

怎么解决这个问题?有什么帮助吗?我使用-x构建,并看到一些调试信息。

代码语言:javascript
运行
复制
go build -x  -gccgoflags -Wl,-R,/opt/gccgo/lib64/ -compiler gccgo -o bin/app main.go

错误是:

代码语言:javascript
运行
复制
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克隆出来的:

代码语言:javascript
运行
复制
gccgo (GCC) 12.0.1 20220217

go version is 1.16.4

我的项目结构像流水一样:

代码语言:javascript
运行
复制
gccgo_demo
├── app
│   ├── app.go
│   ...
├── go.mod
├── go.sum
├── main.go
 ... other code

go mod名称是gccgo_demo,所以app/app.go有一些导入,比如gccgo_demo/app路径。

EN

回答 1

Stack Overflow用户

发布于 2022-04-13 17:43:03

我没有看到您的代码,但我猜您没有传递包含路径的问题。

这个cgo工具总是在包含路径中使用源文件的目录调用C编译器;也就是说,-I${SRCDIR}总是隐含的。这意味着,如果头文件foo/bar.h同时存在于源目录和系统包含目录(或由-I标志指定的其他位置)中,则"#include “将始终优先于其他版本找到本地版本。

所以就像

代码语言:javascript
运行
复制
go build -x  -gccgoflags -I/path/to/your/file -Wl,-R,/opt/gccgo/lib64/ -compiler gccgo -o bin/app main.go

更多细节https://pkg.go.dev/cmd/cgo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71841532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档