проблема при установке старой библиотеки 2005 BOOST

0

Удовольствие каждого

Я новичок в программировании ubuntu C, хотя я довольно опытен в программировании на C в окнах.

Недавно я пришел к нескольким кодам, написанным в 2005 году, и мне интересно узнать, как они работают.

Этим кодам нужна библиотека BOOST для компиляции, однако они не будут компилироваться в самой новой версии BOOST, присутствующей на моем ubuntu 12.04. Я установил gcc-компилятор на lenient, чтобы он игнорировал все эти сообщения об ошибках. Код компилировался и запускался впоследствии.

Тем не менее, когда я использовал отладчик GDB, чтобы посмотреть, как работает программа, я заметил, что есть вероятные ошибки в способе работы программы из-за использования другой версии BOOST, а не ее оригинальной. Поэтому мне нравится устанавливать версию BOOST, соответствующую загруженному мной коду.

Для этого я установил Ubuntu 5.04 и BOOST 1.33.0, которые, похоже, были созданы в конце 2005 года. Я загрузил его, но я не нашел подробных инструкций по его установке. Только смутное описание использования BOOST jam, я играл с BOOST jam довольно долго, не успев. И этот старый BOOST не имеет команд установки, таких как опция "sudo apt-install boost-dev"

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

  • step1: загрузить пробку форсирования с веб-страницы повышения
  • step2: распакуйте его в home/boost/then type make configure

...и так далее...

Большое спасибо за любую полезную информацию.

Новое содержание, добавленное здесь, в ответ на предоставленные комментарии

Привет, я просмотрел информацию, предоставленную вашей ссылкой, и мне удалось запустить примеры библиотеки boost, заданные вашей ссылкой. То есть, я могу скомпилировать один файл cpp с помощью команды

g++ -I boost_1_33_0 test.cpp -o test

(Я сохраняю библиотеку boost и файл cpp для компиляции в той же папке)

Однако программный пакет, который меня интересует, строит с помощью make (not cmake). У меня есть опыт писать файлы cmake, но не создавать файлы. И я не вижу никакой ссылки, чтобы увеличить библиотечную команду в файле make пакета программы. В файле readme есть только одно предложение, в котором говорится, что мне нужно установить boost, не объясняя, что это значит.

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

Файл readme:

Чтобы скомпилировать, зайдите в каталог moses и сделайте "make". Вам понадобятся новейшие библиотеки ускорения. Если компиляция по-прежнему терпит неудачу по неизвестным причинам, вы можете попробовать g++ с -fpermissive (более новые версии отклоняют много кода, который был в порядке со старыми). Если вы собираетесь часто вносить изменения и перекомпилировать, вы, вероятно, захотите отключить -O3 в make файле (я использую шаблоны свободно, поэтому -O3 действительно ускоряет работу кода, но на самом деле замедляет компиляцию).

И make файл:

CC = g++

PROJ_NAME = moses

LINK_FLAGS = -Wall -Iutils/ -Itrees/ -Irewrite -I./ -Imodeling/ -Ifitness/ \
             -Ialignment/ -Isim/ -Ilocal/ -O3
COMP_FLAGS = -Wall -Wno-sign-compare -Iutils/ -Itrees/ -Irewrite -I./ \
             -Imodeling/ -Ifitness/ -Ialignment/ -Isim/ -Ilocal/ -O3

src := $(wildcard *.cc) $(wildcard utils/*.cc) $(wildcard trees/*.cc) $(wildcard    modeling/*.cc) $(wildcard fitness/*.cc) $(wildcard alignment/*.cc) $(wildcard main/*.cc) $(wildcard rewrite/*.cc) $(wildcard sim/*.cc) $(wildcard local/*.cc)

obj := $(patsubst %.cc,%.o,$(src))

all: $(PROJ_NAME)

%.o: %.cc
    $(CC) $(COMP_FLAGS) $< -c -o $@

$(PROJ_NAME): $(obj)
    $(CC) $(LINK_FLAGS) $^ -o $(PROJ_NAME)
run:
    $(PROJ_NAME)
clean:
    find -regex ".*~\|.*\.o"|xargs rm -f
    rm -f $(PROJ_NAME)
    rm -f $(PROJ_NAME).exe*

depend:
    makedepend -Y -- $(COMP_FLAGS) -- $(src)



utils/exceptions.o: utils/exceptions.h utils/utils.h
utils/io_util.o: utils/io_util.h utils/tree.h utils/basic_types.h

# ......lots more lines like that.........
  • 0
    Вам нужны библиотеки, которые нуждаются в компиляции для вашего проекта, или только библиотеки шаблонов? потому что в первом случае вы можете игнорировать форсированную компиляцию. в противном случае, проверьте boost.org/doc/libs/1_35_0/more/getting_started/… , немного более свежую документацию.
  • 0
    Очень жаль за поздний ответ! Я не получил уведомления о комментарии к моему вопросу и не понял, что получил ответ. Проще говоря, интересующий меня программный пакет скомпилирован с помощью cmake. когда я набираю cmake .. в папке bin, система сообщает, что boost отсутствует. Я полагаю, это первый случай вашего ответа? Я проверю информацию, которую вы отправите. Но, пожалуйста, сообщите мне что-нибудь еще, что может быть полезным
Показать ещё 4 комментария
Теги:
boost

1 ответ

1

У меня есть старая инструкция, пролетающая здесь для Boost 1.34.1, которая читается так (конкретный проект, отрезанный):

  • источники распаковки
  • cd в tools/jam/src
  • запустить ./build.sh для создания bjam
  • cd в основной каталог источника
  • tools/jam/src/bin.linux/bjam threading=multi --layout=system --toolset=gcc --without-python variant=release --prefix=/usr/local install

--without-python был необходим, поскольку в целевой системе не было установлен Python, что вызвало неудачу сборки.

Очевидно, что вам может понадобиться/нужно возиться с отдельными настройками (например, поддержка потоковой передачи, вариант выпуска или вариант отладки) в соответствии с вашими потребностями, но это должна быть хорошая отправная точка.

Если вам нужна поддержка ICU (для Boost.Regex и Boost.Locale), она становится более сложной...

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

Редактировать:

Что касается второй части вашего вопроса, Makefile не нужно ссылаться на Boost явно, если boost установлен в стандартных системных каталогах.

Вам не нужно -I/usr/include для компиляции, поскольку поиск выполняется автоматически; то же самое касается -L/usr/lib во время связи.

Тот факт, что автор Makefile скопировал флаги компилятора в флагов компоновщика дословно, на самом деле не помогает интуитивности... ;-)

Если у вас есть Boost в пользовательском каталоге (только в заголовках или указав собственный каталог в опции --prefix в моих инструкциях по сборке), вам необходимо внести следующие изменения (смотрите "boost"):

LINK_FLAGS = -Wall -Iutils/ -Itrees/ -Irewrite -I./ -Imodeling/ -Ifitness/ \
             -Ialignment/ -Isim/ -Ilocal/ -L /path/to/boost/libs -O3 
COMP_FLAGS = -Wall -Wno-sign-compare -Iutils/ -Itrees/ -Irewrite -I./ \
             -Imodeling/ -Ifitness/ -Ialignment/ -Isim/ -Ilocal/ \
             -I /path/to/boost/includes -O3

Это должно делать свое дело. Поскольку Makefile не связывает ни одного из файлов Boost (например, -L boost_program_options или somesuch), кажется, что он использует только заголовки Boost, что сделает часть -L/path/to/boost/libs ( и, фактически, весь этап компиляции, подробно описанный выше) лишний. Вы должны уйти, просто распакуя исходники и -I/path/to/boost/headers каталог заголовков как дополнительный каталог include, используя -I/path/to/boost/headers.

  • 0
    Ура!!! Мне удалось запустить его! Большое спасибо за инструкции! Надеюсь, что это также помогает кому-то еще. У меня есть один последний вопрос, чтобы поставить флаги отладки для GDB, где мне поставить флаг '-g'? Это прямо за первой строкой файла make, например: "CC = g ++ -g"? Кстати: единственная разница с BOOST_1_33_1, которую я использовал, заключалась в том, что сценарий build.sh и bjam находились в другой папке. а threading = multi дает «не знаю, как это сделать» из системы во время компиляции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню