Мой магазин разработки собрал довольно полезный набор тестов на основе 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.





Один важный момент: -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» верхнего уровня.
Спасибо за другие предложения!