首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Bazel中静态链接系统库?

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

Stack Overflow用户
提问于 2017-04-15 01:34:42
回答 2查看 8.2K关注 0票数 10

如何在大多数静态模式(linkstatic=1)下静态链接系统库?我试着使用"-Wl,-Bstatic -lboost_thread -Wl,-Bdynamic“或者"-Wl,-Bstatic","-lboost_thread","-Wl,-Bdynamic",但是他们都不起作用。我不想在系统中硬编码libboost_thread.a的路径。

代码语言:javascript
复制
cc_binary(
    name = "main",
    srcs = [
        "main.cpp",
    ],
    linkopts = [
        "-lboost_thread",
    ],
)

boost_thread库作为动态库进行链接。

代码语言:javascript
复制
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
...
EN

回答 2

Stack Overflow用户

发布于 2017-04-15 06:00:14

在您工作区文件中定义一个外部存储库...

代码语言:javascript
复制
new_local_repository(
    name = "boost_thread",
    path = "/usr/lib/x86_64-linux-gnu",
    build_file = "boost_thread.BUILD"
)

创建boost_thread.BUILD文件

代码语言:javascript
复制
cc_library(
   name = "lib",
   srcs = ["libboost_thread.a"],
   visibility = ["//visibility:public"],
)

然后在您的cc_binary规则中添加

代码语言:javascript
复制
deps = ["@boost_thread//:lib",],

并添加一个

代码语言:javascript
复制
linkstatic = 1

为了安全起见。

票数 8
EN

Stack Overflow用户

发布于 2021-06-10 23:23:19

基于此问题中的答案Telling gcc directly to link a library statically,"-l:libboost_thread.a“将静态链接系统库,而无需在系统中对libboost_thread.a的路径进行硬编码。

代码语言:javascript
复制
cc_binary(
    name = "main",
    srcs = [
        "main.cpp",
    ],
    linkopts = [
        "-l:libboost_thread.a",
        "-l:libboost_system.a",
    ],
)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43416410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档