Как заставить python распознавать чтение предварительно скомпилированного общего файла?


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

Когда я связываю его с моей собственной основной функцией, я могу инициализировать пакет, вызывая функцию инициализации напрямую, initfoo, и все работает нормально.

Как заставить python распознать мою общую библиотеку как пакет, чтобы я мог просто ввести:

import foo

Запуск из обычного интерпретатора python?

Я не заинтересован в использовании distutils для компиляции файл, так как компиляция должна быть частью обычной системы сборки cmake. Мне просто нужно создать любые файлы пакетов, необходимые для загрузки моей общей библиотеки.

Обновление: Теперь он у меня работает. Проблема заключалась в том, что cmake по умолчанию использовал префикс lib для имен общих библиотек. Для исправления этого требуется

SET_TARGET_PROPERTIES(foo PROPERTIES PREFIX "")

И для Mac OS X

SET_TARGET_PROPERTIES(foo PROPERTIES SUFFIX ".so")
1 2

1 ответ:

Если у вас есть общая библиотека с экспортированным символом initfoo (Примечание: поскольку вы пометили Вопрос c++ - Убедитесь, что это символ extern "C", иначе искажение имени помешает интерпретатору найти его), то это уже модуль Python и может быть загружен напрямую, без дальнейшей работы. Вам нужно только убедиться, что он находится на пути поиска, как и любой другой модуль.