我写了一个Go program
,它需要一个录音文件,并提交它的前59秒(为了完全避免使用谷歌云存储的东西,这是不切实际的,在大量的服务器上使用)到谷歌语音到文本API。它在Ubuntu、CentOS6和CentOS7上运行良好,直到这个周末。我刚刚升级了一个运行Ubuntu 22.04的系统。我不得不修改代码。go build
运行正常。但是当我在CentOS6或centos7上运行它时:
[murf@0b06ac9134ab stt3]$ ./stt3
./stt3: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by ./stt3)
./stt3: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by ./stt3)
[murf@0b06ac9134ab stt3]$
在centOS6和centos7上安装了golang,在这些机器上本地构建了exec,结果相同。
我做了一些研究,看到glibc
是golang
的问题,但只有在需要它的一些功能的代码中。重新编译以强制使用旧版本的glibc
似乎是一个可行的选择。
在我看来,谷歌更新了Go API libraries
,并使他们依赖于glibc
....的新版本摆脱这种依赖的唯一方法是在CentOS6(最老的glibc)上重新编译所有的Google Cloud API Go库源。可能还要在centOS7上重新编译,谁知道呢。Go的可移植性就到此为止了。
所以,问题是:
- 哪里是谷歌云API Go库的来源?
- 为什么这么难找?它们是私有的吗?
- 我应该放弃谷歌的东西,并转移到细微差别或其他任何?
- 我怎么报告他们代码中的bug ?
由于glibc的动态链接,尝试构建静态链接版本:
go build -tags netgo,osusergo .
使用-tags osusergo,netgo
强制不依赖库的静态构建。