Включение соответствующих библиотек Boost в исходный код C ++ (с использованием Visual Studio)

У меня есть проект, над которым я работаю (для школы), и я копаюсь в библиотеках Boost в поисках решений. Мне нужен способ распространения необходимого исходного кода Boost с моим приложением, чтобы его можно было скомпилировать без установленных в системе библиотек, выполняющих компиляцию. (В школьных компьютерах нет практически всего, о чем вы можете упомянуть. Школа только что установила CVS в прошлом году. Но у них есть VS2005)

Примечание. Я использую Visual Studio 2005 в Vista. В моей системе установлен Boost 1.34.1. Я использовал автоматический установщик. В документации, с которой я столкнулся, что-то говорится об использовании команды BCP, но эта команда, похоже, ничего не копирует. (Я использую абсолютный путь для вызова BCP, чтобы не вызвать неправильную команду.)

Изменить: я пытаюсь использовать библиотеки RegEx.

Изменить: команда, которую я использую для BCP: "c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" boost/regex.hpp regex\

И он возвращает: no errors detected


person epochwolf    schedule 28.09.2008    source источник
comment
Можете ли вы опубликовать команду, которую вы использовали для запуска bcp? Это может помочь определить проблему.   -  person Daniel James    schedule 29.09.2008


Ответы (6)


Это зависит от библиотеки, которую вы используете. Если вы используете библиотеку только для заголовков (большинство библиотек boost, некоторые заметные исключения - это сигналы, сериализация и дата / время), вы можете просто скопировать эти файлы заголовков. В противном случае вам также нужно будет скопировать файлы cpp. Я предлагаю просто включить их в свой проект.

Итак, вот что вы делаете: вы удаляете путь включения boost из настроек вашего проекта (инструмент-> параметры-> проекты и решения-> каталоги vc ++-> включаемые файлы). Попробуй скомпилировать. Посмотрите, какие из них не работают. Скопируйте этот файл из каталога boost в каталог проекта. Вспенить, промыть, повторять, пока ваш проект не скомпилируется.

Если вы используете библиотеку, для которой требуются файлы .cpp, вы получите сообщение об ошибке во время компоновки. Скопируйте все файлы .cpp библиотеки, которую вы используете, в каталог проекта и добавьте их в свое решение. Восстановите и скрестите пальцы.

Чтобы получить более подробный ответ, опубликуйте, какие библиотеки вы используете.

person Roel    schedule 28.09.2008
comment
Я использую библиотеку RegEx. - person epochwolf; 28.09.2008

Попробуйте вызвать bcp с помощью этой команды:

"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" --boost="c:\Program Files\boost\boost_1_34_1" regex regex

--boost сообщает bcp, где установлен boost, первый regex - это имя модулей, второй - целевой каталог.

О, и если вы еще не заметили, в libs\regex\build\ есть make-файлы Visual C ++.

person Daniel James    schedule 29.09.2008
comment
Спасибо, постараюсь. Если это имеет значение, я использую стандартный C ++, а не его расширение от Microsoft. - person epochwolf; 29.09.2008

Основываясь на вашем комментарии о том, что вы используете регулярное выражение, вот что вы делаете: загружаете «нормальный» zip-файл с ускоренным распространением. Распаковать куда-нибудь. Перейдите в libs / regex / src. Скопируйте и вставьте все файлы .cpp из этого каталога в каталог проекта. Добавьте их в свой проект Visual Studio (щелкните правой кнопкой мыши, «добавить» -> «существующий элемент»). Затем перейдите в boost / regex и скопируйте все, что там (файлы заголовков), в каталог вашего проекта (включая подкаталоги). Измените все включения в ваших собственных файлах .cpp и .h с #include на "regex.hpp", чтобы они включали заголовки из вашего локального каталога, а не те, которые были установлены в масштабе всей системы. Обязательно удалите общесистемный путь включения из настроек вашего проекта, как я сказал в своем последнем посте.

Затем скомпилируйте свой код. Вы получите ряд ошибок «отсутствует включаемый файл», потому что регулярное выражение зависит от других библиотек ускорения. Повторите весь процесс: перейдите в boost / xxx, где xxx - это библиотека, которую ищет регулярное выражение. Вы можете определить библиотеку из сообщения об ошибке. Скопируйте все, что запрашивает компилятор, в каталог вашего собственного проекта. Возможно, вам придется немного поиграть с макетом каталога, прежде чем он заработает. Это действительно пошаговый подход, в котором каждый шаг одинаков: определите отсутствующий файл, скопируйте его, посмотрите, найден ли и исправлен ли этот include, и перейдите к следующему шагу. Боюсь, это скучная работа.

Вы можете автоматизировать все это с помощью bcp, но для разового проекта, такого как школьный, я бы не стал беспокоиться; только если вы думаете, что у вас будут будущие проекты, которые потребуют от вас доставки автономного zip-файла.

person Roel    schedule 29.09.2008
comment
Я, вероятно, буду использовать Boost в будущих проектах. Профессор не возражает. - person epochwolf; 29.09.2008
comment
Вы можете потратить буквально часы на обнаружение подобных зависимостей. bcp гораздо более надежный способ сделать это. Кроме того, гораздо лучше добавить путь включения, чем редактировать пути включения - для некоторых подмножеств повышения нужно редактировать тысячи. - person Roman Starkov; 27.03.2011

Мне это кажется немного странным. Если вы распространяете исходный код, то люди, которым вы распространяете, должны иметь возможность установить boost. Затем, если у них уже есть ускорение, нет дублирования и путаницы, или если их нет и вам нужна встроенная библиотека, они построят правильную библиотеку для своей системы. Если люди, которых вы распространяете, не готовы к установке boost, я бы посоветовал распространять двоичные файлы в установочном пакете, чтобы упростить им задачу.

person ravenspoint    schedule 28.09.2008
comment
Он говорит, что это для школьного проекта. Люди, оценивающие задания, не собираются устанавливать библиотеки для проектов, они будут целыми днями возиться с этими библиотеками для всех учащихся. Назначения обычно должны быть автономными. - person Roel; 28.09.2008
comment
У Роула все правильно. Мне нужно встроить библиотеку с остальным исходным кодом. - person epochwolf; 28.09.2008

Я сталкивался с этим раньше, вставляя Boost в свои проекты. Каждая отдельная библиотека ускорения поставляется с различными файлами проекта для сборки с разными системами make (Jam, make, Visual Studio 6 ...), но они никогда не так хороши с новыми версиями VS.

Я всегда предпочитаю создавать новый файл проекта и встраивать boost прямо в свой проект. Это довольно просто, вам просто нужно добавить все исходные файлы и правильно настроить параметры проекта. Однако есть одно предостережение: вы должны назвать выходной файл библиотеки как boost, потому что их включаемые файлы зависят от этого.

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

person Douglas Mayle    schedule 28.09.2008

Это такая PITA для компиляции boost; только мотивированные студенты смогут это сделать. Вы думали о том, чтобы связать установщик?

person Dustin Getz    schedule 21.08.2009
comment
На самом деле я просто сбросил предварительно скомпилированные библиотеки отладки в соответствующую папку. - person epochwolf; 22.08.2009