问题标签 [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 回答
45267 浏览

go - “gc”和“gccgo”之间的主要区别是什么?

两种流行的 Go 编译器“gc”和“gccgo”之间的主要区别是什么?构建性能?运行时性能?命令行选项?许可?

我不是在寻找关于哪个最好的意见,只是对它们差异的基本概述,所以我可以决定哪个最适合我的需要。

0 投票
2 回答
1345 浏览

go - 如何导入和使用.so文件

请给我示例(代码)如何将 gccgo 制成的 .so 文件导入 main.go?

0 投票
2 回答
1739 浏览

go - 为什么使用 gccgo 构建的二进制文件更小(以及其他差异?)

我一直在试验 gc 和 gccgo,但遇到了一些奇怪的行为。

使用我曾经编写的一个程序来测试一些定理,我得到了这些结果:(为了可读性,我删除了不必要的信息)

我可以看到以下模式:

  1. 构建的二进制文件gccgo的大小要小得多(剥离无助于改变这种差异)
  2. 构建的二进制文件gc执行速度更快
  3. gccgo构建比 with花费更多时间gc

我还测试了其他一些 go 程序(虽然不是那么广泛),它们都表现出相同的行为。

这似乎与这个答案所说的相矛盾:

简而言之:gccgo:更多优化,更多处理器。

我认为更多的优化意味着更快的二进制文件,同时需要更多的时间来编译......

这三种模式的原因是什么?

0 投票
1 回答
2931 浏览

linux - Golang 交叉编译:gccgo - 无法识别的命令行选项 `-marm`

我正在尝试为 linux/arm 编译一个 Go 应用程序,并在我的 Ubuntu 机器上不断遇到问题。当我GOOS=linux GOARCH=arm go build在我的源目录中运行时,我得到了大量的错误,这些错误是:

# github.com/huin/mqtt

gccgo:错误:无法识别的命令行选项`-marm`

运行gccgo --help通知我以 -g、-f -m (和其他)开头的选项将传递给 gccgo 启动的任何子进程,所以我不知道它将 -marm 发送到哪个进程。

有什么线索吗?Ubuntu 14.10 LTS,64 位

0 投票
1 回答
936 浏览

gcc - gccgo 4.9.2 动态链接器错误:未定义对“sync..import”的引用

源代码是

目标文件的构建没有错误

但链接器报告错误undefined reference to `sync..import'

我错过了什么?感谢帮助

我试过静态链接程序,添加一个标志-static-libgo,它可以工作。

0 投票
2 回答
843 浏览

go - 从 C 调用的 Go 中的整数除法

我可以通过这个程序执行整数除法:

然后我在 go 中编写了一个程序,它具有 +、-、* 和 / 的功能。我用 C 语言编写了一个程序,它调用这些函数中的每一个并执行算术运算。除除法外,代码工作正常。

带有函数的 go 文件是:(calc.go)

调用这些函数的 C 程序是:(calcc.c)

我使用以下命令在终端上编译:

gccgo -c calc.go

gcc calc.o calcc.c -o 主

并得到了这个错误: undefined reference to `__go_runtime_error' collect2: error: ld returned 1 exit status

我应该如何解决这个问题?

0 投票
2 回答
883 浏览

c - 在现有的 C 项目上使用 Go

我有一个完全用 C 语言编写的程序,其中使用了多个目标(.o)文件。这些文件都打包在一个存档文件(.a)中,而该存档文件又在程序主(.c)文件的编译时使用。

我想用 Go 为这个项目写一个新文件。我的想法是编写这个.go文件,然后(.o)从中创建一个目标文件。之后,我想把这个目标文件放在已经提到的存档(.a)文件中。

这基本上意味着我想从 C 程序中调用 Go 函数。我读过这个问题,虽然它向我展示了我想要的东西可以通过 GCCGO 实现,但如何做到这一点并不是 100% 清楚。

即使是最基本的测试,我在链接阶段也会出错。更具体地说,这是这样一个基本示例之一:


打印字符串.go

c_caller.c

编译

为了编译 Go 文件,我使用了以下命令:

为了编译整个东西,我使用了这个命令:

我收到的返回消息是:

这意味着 GCCGO 期望 Go 文件中的 main 函数而不是 C 文件。

在第二个命令上使用--static-libgo,-static-Wl,-R,/path/to/libgo.so's_folder选项会产生不同的结果:

这没有任何意义,因为我有 LD_LIBRARY_PATH 环境变量正确指向 libgo.so 的文件夹。


我意识到我可能在这里做错了什么,但我就是看不到那是什么。几乎没有 GCCGO 及其与 C 交互的示例,我能找到的唯一参考是这个页面,我个人觉得这还不够。

我恳请您就此事提供一些建议,并感谢您抽出宝贵时间。:)

0 投票
1 回答
1405 浏览

c - 使用 Go 1.5 buildmode=c-archive 和从 C 链接的 net/http.Server

即将发布的 Go 1.5 带有新的构建模式,允许导出 Go 符号以从 C 代码链接和调用。我一直在玩它,并得到了基本的“Hello world”示例,但现在我正在尝试链接一个启动 a 的 Go 库,net/http.Server但它失败了。代码如下所示(也可在此处获得):

gohttplib.go:

示例/c/main.c:

生成静态链接的对象和标题工作正常:

但是针对它进行编译失败了:

这是在 OS X 10.9.5 上使用来自 Go github 存储库 (38e3427) 的最新版本。我知道 Go 1.5 尚未发布,并且无法保证它可以正常工作,但我这样做是出于教育目的,我怀疑我遗漏了一些东西。

相关版本:

0 投票
1 回答
533 浏览

go - 无法从 go 运行 C 调用

我正在尝试从 go 语言代码运行 C 调用。这是我正在运行的程序:

这是文件proxy.h的内容:

现在,这是我在尝试运行该程序时遇到的错误:

我正在使用 gccgo-5 并使用 1.4.2 版。你能帮我弄清楚这里到底是什么问题吗?TIA。

0 投票
0 回答
184 浏览

c - Gccgo错误在go中传递和修改C结构

我正在尝试将一个 go 库转换为由 C 调用,我从一个简单的测试开始(基于一个示例回答我发现有效的另一个问题)文件,但是当我尝试构建时出现错误。我在 C 中有一个结构,我试图将它传递给一个 go 函数,该函数使用该结构中的数据并返回一个值(在这种情况下是一个整数,但最终它将是另一个结构)。

去版本:1.4.2

gccgo 版本:5.0.1

gcc 版本:4.9.2

类型.h

foo.go

酒吧.c

生成文件

当我运行 make 我得到错误:

根据我从其他搜索中了解到的情况,这些错误与对 C go 库的调用有关,表明这可能没有被编译到目标文件中。我也尝试过直接在 make 文件中运行 gccgo 并得到相同的结果。任何见解和/或帮助表示赞赏。谢谢。

编辑

多亏了这篇文章,我才知道这一点。显然我需要在 Makefile 中为 main 调用 gccgo,因为 gcc 不知道如何正确链接 go 运行时。