簡體   English   中英

如何在 Bazel 中靜態鏈接系統庫?

[英]How can I link a system library statically in Bazel?

如何以靜態模式(linkstatic=1)靜態鏈接系統庫? 我嘗試使用“-Wl,-Bstatic -lboost_thread -Wl,-Bdynamic”或“-Wl,-Bstatic”,“-lboost_thread”,“-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 直接靜態鏈接庫,“-l:libboost_thread.a”將靜態鏈接系統庫,而無需硬編碼系統中 libboost_thread.a 的路徑。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM