问题标签 [gccgo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3115 浏览

gcc - 使用 gccgo 构建 Go - fork/exec 没有这样的文件或目录

我正在尝试在 RHEL 6.8 上运行一个简单的 helloworld.go。

GC 编译器工作正常

相反,出于某种原因,我需要使用 gccgo 进行编译,但永远无法编译。更不用说最终静态编译它了。

对问题的见解将不胜感激?

0 投票
0 回答
713 浏览

gcc - Go 导入包:用 go (-compiler gccgo) 找到 pkg,用 gccgo 找不到

Go/gccgo 版本:6.3.0

我正在构建一个程序go build -compiler gccgo -x <args> <args> program.go。构建过程失败

logging.go进口

如果我logging.go用 独立编译go build,它编译得很好:

如果我/usr/bin/gccgo独立运行命令,错误仍然存​​在。

我曾经strace跟踪

% strace -f -o aa /usr/bin/gccgo <args> logging.go (args same with above)

并发现 open("/opt/gopath/src/github.com/op/go-logging", O_RDONLY) = 10 open("/opt/gopath/src/github.com/op/go-logging.gox", O_RDONLY) = -1 ENOENT (No such file or directory) open("/opt/gopath/src/github.com/op/libgo-logging.so", O_RDONLY) = -1 ENOENT (No such file or directory) open("/opt/gopath/src/github.com/op/libgo-logging.a", O_RDONLY) = -1 ENOENT (No such file or directory) open("/opt/gopath/src/github.com/op/go-logging.o", O_RDONLY) = -1 ENOENT (No such file or directory)

编译器能够go-logging在我的 $GOPATH 中找到包,但由于没有看到任何文件.gox .so .a.o文件而失败。

这与 Go 网站上的内容一致:

知道如何解决这个问题吗?

谢谢。

0 投票
0 回答
202 浏览

gcc - go install 生成二进制文件失败

这个问题有两个方面:

1) Go install 无法生成二进制文件

程序来源:https://github.com/hyperledger/fabric

工作目录:/opt/gopath/src/github.com/hyperledger/fabric

构建的主程序:/opt/gopath/src/github.com/hyperledger/fabric/peer/main.go

构建命令:

我希望内置二进制文件,/opt/gopath/bin但那里什么都没有。

它在控制台上显示一系列 .a 文件已构建并移至/opt/gopath/pkg/linux_amd64/ 最终程序停止并且没有构建二进制文件。无论 CGO_ENABLED 设置为 0 还是 1,这都是正确的。

不知何故,程序认为它完成了,没有链接目标文件和构建二进制文件?我可以使用其他任何调试措施来进一步研究它吗?

2) 'Go install' 命令取自 Makefile

'Go install'命令在 docker 容器中运行,该容器的启动方式与 Makefile 指定的方式相同。唯一的区别是我是手动完成的,分两次,即启动 docker container + go install。如果我用 Makefile 一次性构建它,它会工作得很好。

'docker run <image> go install <args>'使用这种风格命令有什么注意事项吗?

0 投票
1 回答
3665 浏览

c - 如何调试用 cgo 调用的 C 代码?

背景

我目前正在为这个编写一个 Go 接口。

作为第一步,我试图/test/test_pc.c通过 Go 包装器调用它们来运行测试。重要的是要注意,当由 GCC 编译时,测试是成功的。

重要的附加细节:值得一提的是,目前我已经拥有了我想要在上面运行的所有 C 代码import "C"。原因是relic_test.h不提供函数原型,因此 cgo 无法通过调用来识别函数,例如C.foo(). 因此,我把所有的test_pc.c代码都放在了下面的格式中:

问题

当我尝试从 go 中运行它们时,在一个特定的测试中执行会“卡住”(即代码正在执行中,但它只是简单地没有转到下一条指令)。如何找出代码卡住的原因?如何观察程序的执行流程?

我试过的东西

同样,如果我尝试直接使用 C(即,如果我用 GCC 编译并运行它),代码就可以工作。因此,GDB 也将起作用。我也尝试过使用go tools cgo -debug-gcc,但这只会打印预处理指令。go tools cgo -gccgo不输出任何东西。最后,Go 调试器 Delve 无法调试 C 调用。

0 投票
1 回答
256 浏览

go - 构建 gccgo 得到链接器错误

根据此处的说明,我正在构建 gccgo 。但是,我这样做后收到错误消息:

错误:

/opt/gold/bin/ld:错误:找不到-lugin
/opt/gold/bin/ld:错误:找不到-lugin-opt=/home/objdir/./gcc/lto-wrapper
/opt/gold/ bin/ld: 错误: 找不到 -lugin-opt=-fresolution=/tmp/cc9M7ZGm.res

这是我使用的源代码:

操作系统:ubuntu 14.04/x86_64
binutils: http: //ftp.gnu.org/gnu/binutils/binutils-2.29.tar.xz
gccgo 代码分支:https ://github.com/gcc-mirror/gcc/tree/gccgo

有什么我错过的吗?

更新--with-ld==/opt/gold/bin/ld:在为 gccgo make 运行配置时删除该选项后,它对我有用。似乎这是与黄金有关的问题。

0 投票
1 回答
1153 浏览

c - 如何从 Go 函数返回 C 指针?

我有疑问是否可以从 C 上的 Go 函数指针返回?例如 main.c 可以是:

接下来是 Go 代码:

cgo命令之后go build -buildmode=c-archive test.go,我收到头文件并尝试通过命令将其链接到我的 c 项目中gcc -g -pthread main.c test.a -o main,所有编译和链接都成功但在运行时我收到下一个错误:panic: runtime error: cgo result has Go pointer想法是在 c 中接收指向 DB 的指针,做一些工作,当 DB 不需要时关闭D B。

0 投票
0 回答
143 浏览

go - gccgo 的并发问题

我刚刚进入了 GO 领域,所以,像往常一样,我正在尝试用新语言实现一些经典来做一些比较。

我在使用并发的 Montecarlo Simulation for PI 时遇到了一个奇怪的情况:

  • 当我使用 编译代码时gc,对于任意数量的事件值 ( nevents),我提供了所有 goroutines 同时启动并且所有工作都按预期工作(即使“并发不是并行性”,我知道)
  • 当我使用 编译代码时,它在小于或等于 ~10.000.000gccgo时像上面一样工作,但是对于更大的值,每个 goroutine 在前一个几乎完成时开始,并且这种行为越明显越大(~100.000.000 )neventsnvalues

我错过了什么?很好,这是我使用 Go 的第一周!


这是代码:

我添加了一个时间延迟以方便调试。

0 投票
0 回答
194 浏览

go - 将 GOlang 结构的内容复制到 C 结构

我想将 GOLang 结构的内容复制到 C 结构。在这里,我希望将填充的 GO 结构(类型测试结构)复制到 C 结构 test_c。

已经提出以下逻辑。我已经在 go 文件中访问了 C 结构test_c ,作为C.test_c,并尝试使用 C.GoString 将测试结构的内容复制到 C.test_c (p_c),但是当我尝试这样做时,我得到了这个错误

谁能让我知道正在做的错误是什么,有没有更好的方法来实现同样的错误?

下面是代码,

go_stucture.go

包主

cmain.c

cmain.h

0 投票
1 回答
516 浏览

c - 如何在没有定义 main() 的情况下让 cgo 构建目标文件?

我有一个完全用 C 编写的项目。我只需要调用一个必须在 GO 中编码的函数。因此,我使用 cgo 构建 C 文件,然后我想使用生成的目标文件与我的主 C 项目链接。

假设我有一个foo.go具有单个功能的文件func HelloWorld()。我希望从我的 C 代码中执行这个函数。

所以我做了以下步骤

现在我有两个文件:

但是,main()在那里以某种方式定义,我无法将这些目标文件与我的主项目(多个主项目)链接起来。

如何让 cgo 不放入虚拟主目录?还是我这样做完全错了?

编辑我需要入口点在 C 中。其他人发布的建议要求入口点在 GO 中。感谢我信任的另一个用户,我在下面发布了正确的解决方案。

0 投票
1 回答
362 浏览

windows - Windows上的cgo:加载的dll的命名

我正在尝试使用gorocksdb,它是一个 cgo 包,用于在 windows 上使用rocksdb 库。

  • 我用 vcpkg 构建了rocksdb库,它给了我作为输出rocksdb-shared.dll。我将构建路径设置为我的 PATH。
  • 我安装了 msys64 以获得 gcc
  • 我已经设置CGO_CFLAGS="-I/path/to/rocksdb/include"CGO_LDFLAGS="-L/path/to/rocksdb -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -llz4 -lzstd"
  • 我已将Rocksdb-shared.dll 重命名librocksdb.dll ,因为链接器需要 dll 以开头lib
  • 我执行go get ...命令
  • 我运行我的测试 go 文件,我得到了错误The programer can't start because rocksdb-shared.dll is missing ...
  • 如果我将其重命名为rocksdb-shared.dll,则构建失败,因为链接器找不到librocksdb.dll
  • 使其工作的唯一方法是在 PATH 中同时拥有rocksdb-shared.dlllibrocksdb.dll

为什么可执行文件不断加载rocksdb-shared.dll?我在 cgo 包中没有找到对它的任何引用。