如何静态链接外部Go库

时间:2018-09-19 23:18:17

标签: go cross-compiling oci8 cross-build

我有一个用Golang编写的小应用程序,它使用Oci8进行Oracle数据库连接。当我尝试在另一个Macbook(相同的OS版本)上运行基于Macbook构建的二进制文件时,它失败并显示以下错误:

dyld: Library not loaded: @rpath/libclntsh.dylib.12.1
  Referenced from: /Users/{username_masked}/Documents/gitRepo/UserRevoke/./user_revoke
  Reason: image not found
Abort trap: 6

我尝试使用以下静态库进行编译:

go build -a -ldflags '-extldflags "-static"' .

它失败并出现以下错误:

  

/ usr / local / go / pkg / tool / linux_amd64 / link:运行gcc失败:退出状态1   / usr / bin / ld:找不到-lclntsh   collect2:ld返回1个退出状态

然后我尝试按照How do you statically link a c library in go using cgo?

中的说明进行交叉编译

也就是说,

CGO_ENABLED=0 go build -a -installsuffix cgo -ldflags '-s' user_revoke.go

但是,它失败并显示以下错误:

# github.com/mattn/go-oci8
/usr/local/go/src/github.com/mattn/go-oci8/oci8_go18.go:13:10: undefined: OCI8Conn

简而言之,我尝试了多个参数。但是,它们全部要么提供动态链接的二进制文件,要么根本无法编译。

我什至没有尝试在多个操作系统之间分发它。我要做的是为Mac(例如Mac)构建此程序包,以便它可以在任何Mac机器上运行,而无需显式安装该库。

0 个答案:

没有答案