Удовольствие каждого
Я новичок в программировании 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, загруженной из указанной выше ссылки. как.....
...и так далее...
Большое спасибо за любую полезную информацию.
Новое содержание, добавленное здесь, в ответ на предоставленные комментарии
Привет, я просмотрел информацию, предоставленную вашей ссылкой, и мне удалось запустить примеры библиотеки 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.........
У меня есть старая инструкция, пролетающая здесь для 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
.