сборка библиотеки с использованием pybind11, связывающей другую разделяемую библиотеку - PullRequest
1 голос
/ 30 сентября 2019

Ответ моего проекта на SO-файл, который я сделаю, установив cmake в папку моего проекта. И он работает с файлами, когда я запускаю python setup.py install

Но я устанавливаю его с помощью pip, потому что pipскопирует проект в tmpfile, после установки он будет удален, а файл SO также будет удален. Следовательно, когда я импортирую свой проект, он не может найти файл SO.

Конечно, я могу установить файл SO в /usr/local/lib, но я не хочу

У кого-нибудь есть идея, чтобы решить это?

1 Ответ

0 голосов
/ 01 октября 2019

Вы должны сделать вашу общую библиотеку доступной для обнаружения во время выполнения. Применяются те же правила, что и для обычного исполняемого файла C ++.

Здесь есть несколько параметров (список может быть неполным):

  • Поместить разделяемую библиотеку вместе с другими разделяемыми библиотеками (например, /usr/lib/)
  • Добавить пользовательский конфс путем к общей библиотеке /etc/ld.so.conf.d/my_lib.conf
  • Установить LD_LIBRARY_PATH перед вызовом интерпретатора Python
  • Использовать LD_PRELOAD для запуска интерпретатора Python
  • Установить путь к общей библиотеке как RPATH атрибут модуля pybind11.

Я лично использую последний вариант: он позволяет мне свободно использовать virtualenv

...