标签: gccgo

'gc'和'gccgo'之间的主要区别是什么?

两个流行的Go编译器"gc"和"gccgo"之间的主要区别是什么?建立表现?运行时性能?命令行选项?授权?

我不是在寻找最好的意见,只是对他们差异的基本概述,所以我可以决定哪种方法最符合我的需求.

go gccgo

78
推荐指数
1
解决办法
3万
查看次数

在iPhone上使用语言

可以用Go for iPhone写吗?我认为需要采取以下步骤

  1. 编译Go作为ARM Mach-O二进制文件(我希望GCCGO能够做到这一点)

  2. 将iPhone应用程序编译为静态库(我认为可以重命名main() - > main2()等)

  3. 将Go编译为与iPhone静态库链接的Mach-O二进制文件.Go必须调用main2.

  4. 制作一些plist文件,zip,sign

mach-o go ios gccgo

23
推荐指数
3
解决办法
2万
查看次数

怎样才能让gccgo产生矢量化代码?

我试图说服gccgo没有成功矢量化以下片段:

package foo

func Sum(v []float32) float32 {
    var sum float32 = 0
    for _, x := range v {
        sum += x
    }
    return sum
} 
Run Code Online (Sandbox Code Playgroud)

我正在验证由以下内容生成的程序集:

$ gccgo -O3 -ffast-math -march=native -S test.go
Run Code Online (Sandbox Code Playgroud)

gccgo版本是:

$ gccgo --version
gccgo (Ubuntu 4.9-20140406-0ubuntu1) 4.9.0 20140405 (experimental) [trunk revision 209157]
Run Code Online (Sandbox Code Playgroud)

是不是gccgo应该能够对这段代码进行矢量化?具有相同gcc选项的等效C代码完全使用AVX指令进行矢量化...

UPDATE

在这里你有相应的C例子:

#include <stdlib.h>

float sum(float *v, size_t n) {
    size_t i;
    float sum = 0;
    for(i = 0; i < n; i++) {
        sum += v[i];
    }
    return sum;
} …
Run Code Online (Sandbox Code Playgroud)

vectorization go gccgo

20
推荐指数
1
解决办法
442
查看次数

gccgo on Precise

当尝试在Precise上与gccgo链接时,我收到此链接错误:

matt@matt-1005P:~/src/gopath/src/meme$ gccgo cmd/meme/main.go -o meme
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

有报告称此错误,但没有干净的解决方案.我如何解决它?

gccgo(Ubuntu/Linaro 4.7.0-0ubuntu4)4.7.0

Linux matt-1005P 3.2.0-24-generic-pae#38-Ubuntu SMP Tue May 1 16:40:26 UTC 2012 i686 i686 i386 GNU/Linux

linux ld go gccgo ubuntu-12.04

8
推荐指数
1
解决办法
1477
查看次数

在GoLang应用程序中使用C(++)来提高性能

我几天前就开始研究Go了,它来自CGO的东西和gccgo编译器.根据我的理解,这允许使用Go编译器编译Go程序并使用C编译器编译C库并从Go程序内引用这些库.这对我来说非常有趣,因为这使我们可以从主程序中利用C的性能(如果需要),而且开销很小.

但是我不确定那是多么的少,所以我在这里问:

是否有创建C库的情况只是为了在Go应用程序中使用它?或者此功能仅用于促进现有C代码的重用性?

PS:我认为目前CGO不支持C++,但是有人发表了一篇能够使用C函数包装C++代码并成功调用它们的帖子.

c c++ go gccgo

8
推荐指数
1
解决办法
2333
查看次数

如何使用gccgo构建完整的程序二进制文件?

我注意到使用go build二进制结果时可能超过2MB; 但使用gccgo二进制文件小于35k.

我在使用时注意到的另一个问题gccgo是生成的二进制文件不能在另一个Linux机器上运行(libgo.so我不相信)但是go build二进制文件运行得很好(所以我想它是因为二进制文件包含了运行所需的全部内容吗?); 有没有办法做到这一点gccgo

gcc go gccgo

7
推荐指数
2
解决办法
5356
查看次数

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

即将发布的Go 1.5版本附带了新的构建模式,允许导出Go符号从C代码链接和调用.我一直在玩它并得到基本的"Hello world"示例,但是现在我正在尝试链接一个Go库,它启动了net/http.Server它并且它失败了.代码看起来像这样(它也可以在这里获得):

gohttplib.go:

package main

import "C"
import "net/http"

//export ListenAndServe
func ListenAndServe(caddr *C.char) {
    addr := C.GoString(caddr)
    http.ListenAndServe(addr, nil)
}

func main() {}
Run Code Online (Sandbox Code Playgroud)

实例/ C/main.c中:

#include <stdio.h>
#include "../../gohttplib.h"

int main()
{
    ListenAndServe(":8000");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

$ go build -buildmode=c-archive
Run Code Online (Sandbox Code Playgroud)

但是编译它是失败的:

$ gcc -o gohttp-c examples/c/main.c gohttplib.a -lpthread
Undefined symbols for architecture x86_64:
  "_CFArrayGetCount", referenced from:
      _FetchPEMRoots in gohttplib.a(000003.o)
  "_CFArrayGetValueAtIndex", referenced from:
      _FetchPEMRoots in gohttplib.a(000003.o)
  "_CFDataAppendBytes", referenced from:
      _FetchPEMRoots in gohttplib.a(000003.o) …
Run Code Online (Sandbox Code Playgroud)

c linker ld go gccgo

7
推荐指数
1
解决办法
1065
查看次数

使用OS X上的cgo到linux和windows进行1.5交叉编译

git2go在将1.4.2升级到1.5之后,我在将OS X上的库编译为linux amd64时遇到了问题.

我认为这是关于交叉编译任何使用C代码和go 1.5的应用程序.

使用CGO_ENABLED=1,我得到:

$ CGO_ENABLED=1 GOOS=linux GOARCH=amd64 ./script/with-static.sh go install ./...
# runtime/cgo
ld: unknown option: --build-id=none
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

使用-compiler=gccgo,我得到:

$ GOOS=linux GOARCH=amd64 ./script/with-static.sh go install -compiler gccgo ./...
go build github.com/libgit2/git2go: : fork/exec : no such file or directory
Run Code Online (Sandbox Code Playgroud)

如果没有提供任何这些,我得到:

$ GOOS=linux GOARCH=amd64 ./script/with-static.sh go install ./...
can't load package: package github.com/libgit2/git2go: C source files not allowed when not …
Run Code Online (Sandbox Code Playgroud)

cross-compiling go libgit2 cgo gccgo

7
推荐指数
1
解决办法
4312
查看次数

如何在 GCCGO 中导入值以执行类似于 go linker ldflags -X 在 GC 编译器中执行的操作

现在,我有了 bash 代码,它可以使用 go 工具中的链接器在编译时将版本值导入到 go 源代码中。这段代码可以通过GC正常运行。

go build -ldflags“-X 某事:某事” main.go

但我正在机器上测试我的代码,其架构仅支持gccgo而不支持gc,并且gccgo不支持-ldflags,这是gc中的链接器工具。虽然 gccgo 有标志选项 -gccgoflags,但我没有看到我需要的链接标志。

我想知道 gccgo 中是否有任何相对标志或者是否有其他方法可以将值插入到源代码中?

我不想用 bash 硬编码这个功能。

谢谢。

gcc go gccgo

6
推荐指数
0
解决办法
183
查看次数

为什么使用gccgo构建的二进制文件较小(除了其他差异?)

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

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

$ time go build -compiler gc -o checkprog_gc checkprog.go (x 3)
go build <...>    0.13s user 0.02s system 100% cpu 0.149 total
go build <...>    0.13s user 0.01s system 99%  cpu 0.148 total
go build <...>    0.14s user 0.03s system 100% cpu 0.162 total
 --> average:     0.13s user 0.02s system 100% cpu 0.153 total


$ time go build -compiler gccgo -o checkprog_gccgo checkprog.go (x 3)
go build <...>    0.10s user 0.03s system 96% cpu 0.135 total …
Run Code Online (Sandbox Code Playgroud)

go gccgo

5
推荐指数
2
解决办法
969
查看次数

标签 统计

gccgo ×10

go ×10

c ×2

gcc ×2

ld ×2

c++ ×1

cgo ×1

cross-compiling ×1

ios ×1

libgit2 ×1

linker ×1

linux ×1

mach-o ×1

ubuntu-12.04 ×1

vectorization ×1