Как я могу статически связать системную библиотеку в 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
...

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

быть на безопасной стороне.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector