У меня есть двоичный файл, который связан с несколькими библиотеками. Я добавил linkstatic = False
для этого двоичного файла, чтобы библиотеки были динамически связаны (связаны с * .so вместо * .a).
Правило выглядит примерно так:
cc_binary(
name = "intfmgr",
srcs = [
"intfmgr.cc",
"intfmgr.hh",
.....
],
deps = [
....
"//optics:optics",
],
linkstatic = False,
visibility = ["//visibility:public"],
)
Проблема в том, что intfmgr
связывается с liboptics_Sliboptics.so
вместо liboptics.so
, и поэтому не может найти его.
$ ldd intfmgr | grep optics
liboptics_Sliboptics.so => not found
Вот правило cc_library для liboptics.
cc_library(
name = "optics",
srcs = ["optics.cc"],
hdrs = ["optics.hh"],
deps = ["//infra/process:proc_infra"],
visibility = ["//visibility:public"],
)
Зачем intfmgr
связываться с liboptics_Sliboptics.so
? Из других ссылок на intfmgr
я вижу, что имя библиотеки содержит строку пути относительно рабочей области.
$ ls WORKSPACE
WORKSPACE
$ ls optics/BUILD
optics/BUILD