bazel: ссылка на библиотеку без префикса 'lib' - PullRequest
0 голосов
/ 29 мая 2018

У меня есть внешняя библиотека ace.so.

cc_library(
    name='ace',
    hdrs=glob(['path/to/ace/**']),
    srcs=['path/to/ace.so'],
)

Как мне связаться с этой библиотекой с помощью bazel?Я знаю двоеточие можно использовать при прямом вызове gcc / g ++, но я не уверен, как получить такое же поведение от bazel.

  • Я пытался добавить -l:ace.so(также -Wl,-l:ace.so) в copts, но кажется, что Базель не передает это в gcc или и добавляет его в файл @, используемый для аргументов компоновщика.
  • Я пытался nocopts='-lace.so' в сочетании с linkopts=['-l:ace.so'].Не повезло.
  • Я также попробовал cc_import вместо cc_library, но это тоже не сработало.

Я прочитал Импорт предварительно скомпилированных библиотек C ++ doc, но я ничего не видел об использовании библиотек с произвольным префиксом - или без префикса.

В качестве временного исправления я добавил символическую ссылку libace.so, указывающую на ace.soи изменил строку srcs для соответствия.Хотя это работает, я бы предпочел убедить Базеля использовать библиотеку как есть.

1 Ответ

0 голосов
/ 03 июня 2018

Оглядываясь вокруг того, как информация о библиотеках собирается и передается, я боюсь этого (предположение, что «простые» динамические библиотеки имеют префикс lib и libfoo.so могут быть заданы как -lfoo, довольно жестко запрограммированы вмомент. То же самое нельзя сказать о том, что она считается «версионной» (соответствует шаблону "^.+\\.so(\\.\\d+)+$") динамической библиотекой, которая будет передаваться как -l:foo.so.1. Но, к сожалению, это не очень вам помогает, потому что вывсе еще нужно использовать подобный обходной путь и создать фикцию управления версиями для загрузки. При этом, если даны имена ваших имен solib, символическая ссылка звучит как разумный обходной путь.

...