Как вы заставляете python распознавать чтение предварительно скомпилированного общего файла? - PullRequest
2 голосов
/ 23 июня 2011

У меня есть пакет, который я создал на 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 голосов
/ 23 июня 2011

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

...