Использование boost-python с C++ в Linux

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

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

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
3 083
3

Ответы 3

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

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

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

man gcc

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

Обновлено: На самом деле вы можете импортировать отладочную версию своего проекта в не отладочную сборку python. Где бы вы ни включили python.h, включите вместо него boost / python / detail / wrap_python.hpp.

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

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

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

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

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

Другие вопросы по теме