你使用的Go版本是什么( go version
)?
go version go1.10.3 gccgo (GCC) 8.2.1 20180813 solaris/sparc
这个问题在最新版本中是否会重现?
是的。从源代码编译
你正在使用什么操作系统和处理器架构( go env
)?
GOARCH="sparc"
GOBIN=""
GOCACHE="/export/home/amandeep/.cache/go-build"
GOEXE=""
GOHOSTARCH="sparc"
GOHOSTOS="solaris"
GOOS="solaris"
GOPATH="/opt/go_pkgs"
GORACE=""
GOROOT="/usr/gnu"
GOTMPDIR=""
GOTOOLDIR="/usr/gnu/libexec/gcc/sparc-sun-solaris2.10/8.2.1"
GCCGO="/usr/gnu/bin/gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build699772262=/tmp/go-build -gno-record-gcc-switches -funwind-tables"
你做了什么?
尝试编译一个简单的程序:
package main
/*
#include <stdio.h>
void testc() {
printf("Hello cgo");
}
*/
import "C"
func main() {
C.testc()
}
你看到了什么?
编译失败,错误信息为:
./abc.go:13:5: 调用非函数C.testc
5条答案
按热度按时间wpcxdonn1#
包括一些相关的输出(如在此处的线程中讨论的):
7cjasjjr2#
/cc @ianlancetaylor@thanm
jfewjypa3#
从邮件列表中得知,这是一个32位SPARC处理器的问题,可能的原因是debug/elf包中的
*File
类型没有applyRelocationsSPARC
方法。虽然有一个applyRelocationsSPARC64
,但没有32位实现。iqxoj9l94#
你好,@ianlancetaylor。我刚刚查看了源代码,发现已经存在实现:https://github.com/golang/gofrontend/blob/7b25b4dff4778fc4d6b5d6e10594814146b3e5dd/libgo/go/debug/elf/file.go#L1073
我是不是漏掉了什么?
hmtdttj45#
对不起,您说得对。我正在查看gc源代码,但您使用的是gccgo。该函数在gccgo中存在。
我不确定这里发生了什么。