不能隐式地在共享库中包含runtime / cgo

时间:2016-09-21 12:11:56

标签: go build shared-libraries

关注我的earlier question,现在我在尝试执行此article中的所有相同步骤时遇到此错误,因为我已从Go 1.6.1升级到Go 1.7.1(我不能回到Go 1.6.1,因为当尝试编译一些共享库时链接器崩溃了。)

我做了什么:

  1. 已安装进入~/.go/go(此后称为GOROOT)。
  2. 已编译libstd.so

    GOROOT=~/.go/go GOPATH=~/tests go install -buildmode=shared -linkshared std
    
  3. 已编译的calc库:

    GOROOT=~/.go/go GOPATH=~/tests go install -a -x -buildmode=shared -linkshared calc
    
  4. 试图编译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
    
  5. 我尝试重复使用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
    

    这是一个已知的错误吗?是否支持共享库?

1 个答案:

答案 0 :(得分:2)

我能够使用DLL的唯一方法是使用buildmode = c-archive并为我想要导出的所有go函数编写C存根。但是我正在为Windows工作,我不必在Linux上乱用它。这是一条调查的道路。