Как развернуть общую библиотеку? - PullRequest
0 голосов
/ 26 мая 2020

Я хотел бы «быстро» развернуть разделяемую библиотеку на моем Ubuntu. Это для краткосрочного проекта, поэтому я не хочу использовать здесь автоматические инструменты, а делаю все вручную.

Итак, я создал свою библиотеку с помощью этого: проект, я хотел бы использовать libfoo.so, теперь находящийся в /usr/lib/foobar/libfoo.so. Итак, я построил его с помощью:

$(CC) test.c -lfoo 

К сожалению, у меня есть эта проблема:

/usr/bin/ld: cannot find -lfoo

Теперь, когда я могу сделать -L/usr/lib/foobar/libfoo.so, но это местоположение должно быть известно моим рабочим система.

Я вынужден вставлять его прямо в /usr/lib? У меня такая же проблема с /usr/local/lib, который, похоже, не является маршрутом по умолчанию для использования с gcc ... -l...

Как мне обычно развертывать общую библиотеку?

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Список каталогов из ld.so.conf имеет влияние на всю систему; компоновщик времени выполнения будет искать в этих каталогах при запуске любого динамического c двоичного файла. Если вам на самом деле не нужны дополнительные общесистемные накладные расходы, более эффективно в частном порядке искать в другом каталоге по индивидуальному заказу / по мере необходимости. Private-search идеально подходит для одноразовых, одноразовых или редко используемых пользовательских библиотек.

Для 1 или нескольких бункеров, которые ссылаются на эти библиотеки, бункеры могут быть перестроены с помощью директивы для среды выполнения компоновщик в частном порядке поиск 1+ пользовательских каталогов; например:

gcc -L/usr/local/lib64 -Wl,-rpath=/usr/local/lib64 -lblah

Для получения дополнительных сведений см. gcc и ld страницы руководства для соответствующих опций -Wl, и -rpath.

1 голос
/ 26 мая 2020

Чтобы сделать каталог известным для Dynami c компоновщик (ld.so), чтобы его можно было найти в времени выполнения вне зависимости от LD_LIBRARY_PATH:

  • перечислите его в /etc/ld.so.conf (или во включаемом файле под /etc/ld.so.conf.d, если в основном файле /etc/ld.so.conf есть соответствующий оператор include, чтобы включить это)
  • , затем запустите /sbin/ldconfig

Что касается компоновщика времени сборки (ld), вполне нормально ожидать, что придется явно указывать расположение библиотеки с помощью флага -L в компиляторе, обычно с каталогом в качестве аргумента, например, -L/usr/lib/foobar. Однако, согласно странице руководства для компоновщика времени компиляции, ld, путь поиска для библиотек действительно содержит (после всего остального) каталоги, на которые ссылается /etc/ld.so.conf. Таким образом, хотя ld.so.conf в первую очередь предназначен для использования с компоновщиком времени выполнения, как следует из названия, компоновщик времени сборки фактически найдет вашу библиотеку, как только вы укажете там каталог.

...