我有一个用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机器上运行,而无需显式安装该库。