是否有可能在Bazel中创建一个完全静态的二进制文件,或者GCC或Bazel中是否存在阻止我的错误。
这就是我得到的错误
/bin/ld.gold: error: /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.o: requires dynamic R_X86_64_32 reloc against '__TMC_END__' which may overflow at runtime; recompile with -fPIC
如果我理解正确的话,这是一个没有静态链接的libstdc++版本。我想知道是否有一个静态链接的libstdc++版本可以让Bazel使用。
试图在Bazel的回购协议中研究这个问题,但提到的解决方法对我来说不起作用
https://github.com/bazelbuild/bazel/issues/8672
信息转储
-
Bazel版本:
3.3.1
-
GCC版本:GCC(Ubuntu9.3.0-17ubuntu1~20.04)9.3.0
-
OS:Ubuntu20.04在Docker容器中
我的构建文件
cc_binary(
name = "main",
srcs = ["main.cpp"],
linkshared=True,
copts = ["-shared", "-fpic", "-fPIC"],
features = ["fully_static_link"],
)
主要的cpp
int main()
{
return 1;
}
具有类似结果的其他版本的生成文件
cc_binary(
name = "main",
srcs = ["main.cpp"],
linkshared=True,
linkstatic=1,
linkopts = ["-static"]
)
cc_binary(
name = "main",
srcs = ["main.cpp"],
linkshared=True,
linkstatic=1,
linkopts = ["-static"],
features = ["fully_static_link"],
copts=["-fpic"],
)
TL;博士
Bazel不会在Ubuntu20.04、GCC 9.3.0中编译完全静态的二进制文件。我想了解发布的问题是否相关,或者我是否不了解静态链接?