我有一个用 Golang 编写的小应用程序,它使用 Oci8 进行 Oracle 数据库连接。当我尝试在另一台 Macbook(相同的操作系统版本)上运行我的 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 退出状态
然后我尝试按照如何使用 cgo 在 go 中静态链接 ac 库中的说明进行交叉编译?
那是,
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 机器上运行,而无需显式安装库。