如何在Bazel中静态链接系统库



如何在大部分静态模式下静态链接系统库(linkstatic=1)?我尝试使用"-Wl,-Bstatic-lbox_thread-Wl,-B dynamic"或"-Wl、-Bstatic"、"-lbox_tthread"、"-Wl和-Bdynamic",但都不起作用。我不想在系统中硬编码libboost_thread.a的路径。

cc_binary(
name = "main",
srcs = [
"main.cpp",
],
linkopts = [
"-lboost_thread",
],
)

boost_thread库被链接为一个动态库。

ldd bazel-bin/main
linux-vdso.so.1
libboost_thread.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
...

在WORKSPACE文件中定义一个外部存储库。。。

new_local_repository(
name = "boost_thread",
path = "/usr/lib/x86_64-linux-gnu",
build_file = "boost_thread.BUILD"
)

创建boost_thread.BUILD文件

cc_library(
name = "lib",
srcs = ["libboost_thread.a"],
visibility = ["//visibility:public"],
)

然后在您的cc_binary规则中添加

deps = ["@boost_thread//:lib",],

并投入

linkstatic = 1

为了安全起见。

根据这个问题的答案,直接告诉gcc静态链接一个库,&quot-l: libboost_thread.a";将静态链接系统库,而无需对系统中libboost_thread.a的路径进行硬编码。

cc_binary(
name = "main",
srcs = [
"main.cpp",
],
linkopts = [
"-l:libboost_thread.a",
"-l:libboost_system.a",
],
)

最新更新