библиотека Boost выдает ошибки в Ubuntu - PullRequest
2 голосов
/ 13 апреля 2010

Я пытаюсь скомпилировать пакет на Ubuntu 8.1

при выполнении этой команды: ./configure я получаю следующую ошибку:

проверка версии заголовков Boost> = 103700 ... нет configure: ошибка: не удается найти версию заголовков Boost> = 103700

зная, что я установил необходимые буст-пакеты, используя следующую команду:

$ apt-get install libboost-dev libboost-graph-dev libboost-iostreams-dev

Кто-нибудь может помочь, пожалуйста?


спасибо. Теперь это работает, но я получаю другую ошибку при запуске ./configure: проверка удобства использования boost / iostreams / device / file_descriptor.hpp ... да проверка наличия boost / iostreams / device / file_descriptor.hpp ... да проверка на boost / iostreams / device / file_descriptor.hpp ... yes проверка библиотеки Boost iostreams ... no configure: error: не удается найти флаги для связи с Boost iostreams какие-либо идеи, пожалуйста?

1 Ответ

2 голосов
/ 13 апреля 2010

Возможно, что версия boost, которую вы получаете из репозитория Ubuntu, слишком старая (рекомендуется здесь , что самая высокая версия для 8.10 - 1.35; похоже, ваш скрипт configure запрашивает для 1,37). Возможно, вам придется строить из исходного кода; в ответах на вопрос, на который я ссылаюсь, есть дополнительная информация, которая, надеюсь, поможет.

UPDATE:

Судя по вашей новой ошибке, похоже, что configure теперь не может найти библиотеку boost_iostreams. В моей системе это /usr/lib/libboost_iostreams-mt.[a|so] - есть ли у вас эти файлы (возможно, в другом каталоге, в зависимости от того, где вы установили boost)?

Вы также можете попробовать запустить ldconfig в случае отсутствия символической ссылки (скажем, с libboost_iostreams-mt.so.1.37.0 до libboost_iostreams-mt.so).

Этот configure генерируется GNU autoconf? Если это так, в том же каталоге должен быть файл с именем config.log, содержащий список всех команд, которые configure пытались выполнить при поиске вещей. Если там есть что-нибудь о boost_iostreams, не могли бы вы опубликовать это?

Одно совершенно случайное предположение: некоторые примеры, которые я нашел в веб-ссылке на boost_iostreams без суффикса многопоточности -mt - но у меня их вообще нет на моей машине. Может быть, ваш configure скрипт сталкивается с той же проблемой?

ОБНОВЛЕНИЕ 2

Сценарий configure, похоже, ищет однопоточную отладочную сборку библиотеки boost iostreams, которая не будет создаваться по умолчанию при сборке из исходного кода в linux. Кроме того, по умолчанию в linux нет имен библиотек в зависимости от конфигурации сборки (поэтому библиотеки, которые вы нашли в /usr/lib, могут не совпадать с теми, которые вы установили из исходного кода, если вы не переопределите это). На самом деле это не объясняется на веб-сайте boost, я узнал об этом только из файла Jamroot (тоже работает bjam --help)! В любом случае, чтобы получить библиотеку с правильной конфигурацией сборки и правильным именем, мне нужно перейти в корень дерева исходных текстов надстройки и запустить:

sudo bjam --with-iostreams --layout=tagged variant=debug threading=single install

Для меня это помещает библиотеки (libboost_iostreams-d.a и общие версии) в /usr/local/lib, где ld найдет их по умолчанию, так что это должно быть хорошо. Если вам нужно, чтобы они пошли куда-то еще, вы можете использовать опцию --prefix=..., например, bjam. если вы хотите их в /usr/lib, вы можете сделать --prefix=/usr. Если пакет, который вы собираете, нуждается в большем количестве библиотек наддува, вы можете удалить --with-iostreams, и тогда они все будут собраны (или замените iostream на имя нужной вам библиотеки).

Дополнительное замечание: мне пришлось установить пакет libbz2-dev, чтобы получить boost iostreams для сборки - здесь легко пропустить ошибку, если вы соберете все boost, так как есть очень много выходных!

...