Правильный способ создания и использования общих библиотек Rust?

Я работаю над привязками для библиотеки cpp. Для этого я написал capi / wrapper для библиотеки и скомпилировал его в общую библиотеку (файл.so).

У меня вопрос: как мне затем использовать и интегрировать этот файл в груз, не заставляя пользователя устанавливать его? В настоящее время я собираю cpp через Makefile, вызываемый из переменной build в Cargo.toml, но я не уверен, что делать с скомпилированной библиотекой.

Для тестирования я могу использовать rpath или LD_LIBRARY_PATH, чтобы указать исполняемый файл в правильном месте, но это не будет работать при распространении библиотеки.

Как люди справляются с этим?

1 ответ

Решение

Прежде всего, определите, действительно ли вам нужна разделяемая библиотека. Это не ясно из вашего вопроса, но если вы скомпилировали свою собственную обертку в разделяемую библиотеку, это, вероятно, не нужно - вы можете скомпилировать свой код в статическую библиотеку и связать ее непосредственно с исполняемым файлом.

Более того, вы также можете попытаться статически связать эту стороннюю библиотеку. Я не думаю, что это должно быть сложно. И да, вам нужно использовать build Команда в манифесте, чтобы сделать все это сейчас.

Однако, если вам все еще нужно использовать разделяемую библиотеку и вы не хотите, чтобы конечный пользователь устанавливал ее самостоятельно (что странно, потому что в этом смысл разделяемых библиотек), вы должны распространять ее вручную. Например, вы можете написать make-файл, который собирает архив, который ваши пользователи могут извлечь и использовать. Чтобы ваша программа правильно находила библиотеку, у вас будет пользователь, который установит этот архив в корневой каталог системы (например, /usr на Linux; тогда эта общая библиотека будет расположена автоматически) или вам придется написать небольшую оболочку сценария оболочки вокруг вашего исполняемого файла, которая найдет общую библиотеку и установит соответствующие LD_LIBRARY_PATH,

Я бы пошел по первому пути. Обычно все основные платформы предоставляют средства для создания установочных пакетов (deb/rpm/pkg.tar.xz/ что угодно в Linux, brew на Mac, установщик Windows в Windows, хотя в Windows вы можете просто поместить свою общую библиотеку в тот же каталог, что и исполняемый файл и он будет работать). Вам просто нужно создать пакеты для платформы, на которой работают ваши пользователи, так что ваша программа будет установлена ​​в правильные каталоги, а ваша общая библиотека будет решена автоматически.

Другие вопросы по тегам