首页 > 解决方案 > go 1.10:不能在共享库中隐式包含 runtime/cgo

问题描述

我正在尝试执行go build -buildmode=shared -linkshared test,但出现错误:

go 1.10: cannot implicitly include runtime/cgo in a shared library

我在那个包里只有一个文件

lib.go

package test
import "fmt"
func Hello() {
    fmt.Println("Hi")
}

我在运行go1.10.4 linux/amd64的 linux 机器上

标签: go

解决方案


这个过程对我有用:

$ docker run -it golang /bin/sh
# cd src
# mkdir test
# cat << EOF > test/lib.go
> package test
import "fmt"
func Hello() {
    fmt.Println("Hi")
}> > > > 
> EOF
# cat test/lib.go
package test
import "fmt"
func Hello() {
    fmt.Println("Hi")
}
# go install -buildmode=shared -linkshared std
# ldd /usr/local/go/pkg/linux_amd64_dynlink/libstd.so
    linux-vdso.so.1 (0x00007fff4093d000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3454de5000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3454dc4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3454c03000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3457514000)
# go install -buildmode=shared -linkshared test
# ldd /go/pkg/linux_amd64_dynlink/libtest.so
    linux-vdso.so.1 (0x00007ffddbbeb000)
    libstd.so => /usr/local/go/pkg/linux_amd64_dynlink/libstd.so (0x00007f82bc8cf000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f82bc70a000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f82bc705000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f82bc6e4000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f82bf0fc000)
# 

推荐阅读