关注我的earlier question,现在我在尝试执行此article中的所有相同步骤时遇到此错误,因为我已从Go 1.6.1升级到Go 1.7.1(我不能回到Go 1.6.1,因为当尝试编译一些共享库时链接器崩溃了。)
我做了什么:
~/.go/go
(此后称为GOROOT
)。已编译libstd.so
:
GOROOT=~/.go/go GOPATH=~/tests go install -buildmode=shared -linkshared std
已编译的calc
库:
GOROOT=~/.go/go GOPATH=~/tests go install -a -x -buildmode=shared -linkshared calc
试图编译app
:
GOROOT=~/.go/go GOPATH=~/tests go build -a -x -linkshared -o app cashier
并收到此错误:
~/.go/go/pkg/tool/linux_amd64/link: cannot implicitly include runtime/cgo in a shared library
我尝试重复使用CGO_ENABLED=0
前置于环境中的步骤,但没有任何东西会以这种方式构建。给我这个错误:
imports runtime/cgo: C source files not allowed when not using cgo or SWIG: gcc_fatalf.c gcc_linux_amd64.c gcc_mmap.c gcc_util.c
这是一个已知的错误吗?是否支持共享库?
答案 0 :(得分:2)
我能够使用DLL的唯一方法是使用buildmode = c-archive并为我想要导出的所有go函数编写C存根。但是我正在为Windows工作,我不必在Linux上乱用它。这是一条调查的道路。