Ошибка импорта: libxxx: невозможно открыть файл общего объекта: такого файла или каталога нет.Python

Программы на Python
Ответить
Anonymous
 Ошибка импорта: libxxx: невозможно открыть файл общего объекта: такого файла или каталога нет.

Сообщение Anonymous »

Я пытаюсь создать пакет Python, который взаимодействует с C ++ -кодом. Я создал обертку Pybind11, чтобы сделать Interop. Я создал файл setup.py, следуя инструкциям здесь: < /p>
from pybind11.setup_helpers import Pybind11Extension

ext_modules = [
Pybind11Extension(
"python_example",
sorted(glob("src/*.cpp")), # Sort source files for reproducibility
extra_link_args=[f"-Wl,-rpath,$ORIGIN"]
),
]

setup(..., ext_modules=ext_modules)

Я установил extra_link_args = [f "-wl, -rpath, $ Origin"] , как я понимаю, он внедрит начало в пути поиска нативных библиотек. (Я также попробовал без него без повезло). Мой модуль C ++ зависит от общей библиотеки, которую я поместил рядом с __init __. py . Но когда я пытаюсь импортировать свой модуль C ++, я получаю: < /p>
ImportError: libxxx: cannot open shared object file: No such file or directory
< /code>
Как я могу исправить ошибку? < /p>
Добавление более подробной /p>
  • Убедитесь, что зависимость помещается в тот же каталог, что и модуль Pybind: < /li>
    < /ol>
    $ tree -L 1 venv/lib/python3.10/site-packages/my_package/
    venv/lib/python3.10/site-packages/my_package/
    ├── __init__.py
    ├── __pycache__
    ├── my_data
    ├── libxxx.so.1
    ├── libyyy.so
    ├── libyyy.so.1.14.1
    └── my_package_cpp.cpython-310-x86_64-linux-gnu.so


    Убедитесь Добавить каталог, содержащий модуль в свой путь поиска: < /li>
    < /ol>
    $ readelf -d venv/lib/python3.10/site-packages/my_package/my_package.cpython-310-x86_64-linux-gnu.so | grep -E 'RPATH|RUNPATH'
    0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN]


    И все же динамический линкер ищет поиск повсюду, за исключением каталога, содержащего сам модуль ($ ourigan ):
    < /ol>
    ld_debug = libs python3 -c "import my_pybind_module" < /p>

    ldd не жалуется:
$ ldd venv/lib/python3.10/site-packages/my_package/my_package_cpp.cpython-310-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffea75f7000)
libxxx.so.1 => /home/me/my_project/venv/lib/python3.10/site-packages/my_package/libxxx.so.1 (0x00007f072f352000)
libyyy.so.1.14.1 => /home/me/my_project/venv/lib/python3.10/site-packages/my_package/libyyy.so.1.14.1 (0x00007f072e3bb000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f072e187000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f072e167000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f072df3e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f072de55000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f072de50000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f072de4b000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f072de46000)
/lib64/ld-linux-x86-64.so.2 (0x00007f072f48c000)


Подробнее здесь: https://stackoverflow.com/questions/793 ... -directory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»