Использование boost-python с C ++ в Linux - PullRequest
3 голосов
/ 16 сентября 2008

Мой магазин разработок собрал довольно полезный набор тестов на основе Python, и мы хотели бы протестировать с ним некоторый код C ++ на основе Linux. Мы получили тестовый проект, который они поставляют с Boost для компиляции (введите «bjam» в каталоге, и он работает), но у нас возникли проблемы с нашим реальным проектом.

Сборка библиотек boost и bjam из исходного кода (v1.35.0), когда я запускаю bjam, я получаю .so в каталоге bin / gcc-4.1.2 / debug. Я запускаю python и "import" и получаю: Ошибка импорта: libboost_python-gcc41-d-1_35.so.1.35.0: не удается открыть файл общего объекта: такого файла или каталога нет

Глядя в каталог библиотеки, у меня есть следующее: libboost_python-gcc41-mt-1_35.so libboost_python-gcc41-mt-1_35.so.1.35.0 libboost_python-gcc41-mt.so

Очевидно, что мне нужны -d вместо библиотек -mt или чтобы указывать на библиотеки -mt вместо -d, но я не могу понять, как заставить мой файл Jamroot делать это.

Когда я устанавливаю версии библиотек Debian Etch, я получаю «Нет Jamfile в / usr / include» - и есть ошибка debian, которая говорит о том, что они исключили jamfile системного уровня.

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

Ответ на ответ 1: Спасибо за подсказку. Итак, вы знаете, как я мог бы заставить его использовать библиотеки MT вместо этого? Кажется, это скорее проблема с bjam или Jamfile, который я использую, думая, что я в режиме отладки, хотя я не могу найти никаких флагов для этого. Хотя я знаю, как включить определенные библиотеки в вызов GCC, я не вижу способа настроить это с конца Boost.

Ответы [ 3 ]

2 голосов
/ 16 сентября 2008

Если вы также хотите собрать отладочные варианты библиотек boost, вы должны вызвать bjam с опцией --build-type=complete.

В Debian вы получаете отладочный интерпретатор Python в пакетах python2.x-dbg. Отладочные сборки библиотек Boost находятся в libboost1.xy-dbg, если вы хотите использовать систему Boost.

2 голосов
/ 18 сентября 2008

Нашли решение! По умолчанию Boost создает отладочную сборку. Ввод "bjam release" создает конфигурацию выпуска. (Насколько я могу судить, это нигде не указано ни в одной документации.) Обратите внимание, что это не то же самое, что изменение типа сборки на выпуск, так как это не создает конфигурацию выпуска. Выполнение «полной» сборки, как полагает Торстен, также не мешает создавать только отладочную версию.

Стоит также отметить, что библиотеки -d были в <boost-version> / bin.v2 / libs / python / build / <gcc version> / debug /, а библиотеки релизов были в <gcc-version> / release и не были установлены в каталог верхнего уровня 'libs'.

Спасибо за другие предложения!

2 голосов
/ 16 сентября 2008

Один важный момент: -d, конечно, означает отладку и должен быть связан только с отладочной сборкой вашего проекта и может использоваться только с отладочной сборкой python (ИЛИ НЕ, СМ. НИЖЕ), Если вы попытаетесь связать отладочную библиотеку с не отладочной сборкой или попытаетесь импортировать отладочный pyd в не отладочный питон, произойдут плохие вещи.

mt означает многопоточность и является ортогональным к d. Вы, вероятно, хотите использовать mt non-d для своего проекта.

Боюсь, я не знаю, как сказать gcc, с чем ссылаться (я использовал Visual Studio). Одна вещь, чтобы попробовать:

man gcc

Где-то, что должно сказать вам, как заставить определенные библиотеки на компоновщик.

РЕДАКТИРОВАТЬ: На самом деле вы можете импортировать отладочную версию вашего проекта в неотладочную сборку Python. Куда бы вы не включили python.h, включите вместо него boost / python / detail / wrap_python.hpp.

...