bit*_*ter 5 glibc build libc dynamic-linking go
我已经安装了另一个版本的GLIBC,并希望针对此新GLIBC编译Golang代码。
我尝试了以下命令进行动态编译:
go build --ldflags '-linkmode external -L /path/to/another_glibc/
Run Code Online (Sandbox Code Playgroud)
但是当我运行ldd时"go_executable",它仍然显示链接到默认glibc。
输出:
linux-vdso.so.1 => (0x00007fff29da7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f128a93c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f128ad06000)
Run Code Online (Sandbox Code Playgroud)
预期产量:
linux-vdso.so.1 => (0x00007fff45fa7000)
libc.so.6 => /another_glibc/lib/libc.so.6 (0x00007f5cd2067000)
/another_glibc/ld-2.29.so => /lib64/ld-linux-x86-64.so.2 (0x00007f5cd2420000)
Run Code Online (Sandbox Code Playgroud)
这里缺少什么?
MrM*_*Mid 34
这不是问题的答案,只是一个警告:
如果你像我一样,因为正在编译以部署在另一台机器上而来到这里,并得到“版本‘GLIBC_2.32’未找到”(或类似的),但你不是故意使用 CGo,请停止在这里。
Go on Linux 动态链接 C 库以实现更快、更小的构建,但它能够在交叉编译等情况下对它们进行补充。
您可以export CGO_ENABLED=0禁用 CGo 并摆脱依赖关系。
在做go build
Set之前
CGO_LDFLAGS
动态的:
export CGO_LDFLAGS="-Xlinker -rpath=/path/to/another_glibc/lib"
Run Code Online (Sandbox Code Playgroud)
静止的:
export CGO_LDFLAGS="-Xlinker -rpath=/path/to/another_glibc/lib -static"
Run Code Online (Sandbox Code Playgroud)
CGO_LDFLAGS 允许你为 Go 设置类似 GCC 的 ld 标志。