Gooday everyone
我是ubuntu C编程的新手,虽然我是 在Windows中用C编程很有经验。
我最近写了很多代码 在2005年,我有兴趣了解它们是如何运作的。
这些代码需要BOOST库来编译,但是它们不会 编译我的ubuntu 12.04上的最新BOOST版本。 我将gcc编译器设置为lenient,以便忽略所有这些错误 消息。代码确实编译并在之后运行。
然而,当我使用GDB调试器来观察程序如何流动时 我注意到程序运行方式可能存在错误 由于使用了不同的BOOST版本而不是它的原始版本。于是 我喜欢安装与我下载的代码相对应的BOOST版本。
为此,我安装了Ubuntu 5.04和BOOST 1.33.0,这似乎是在2005年末创建的。我下载了它 但我没有找到任何关于如何安装它的详细说明。 关于使用BOOST果酱的模糊描述,我玩BOOST 果酱已经相当长一段时间没有成功 而这个旧的BOOST没有像这样的安装命令 “sudo apt-install boost-dev”样式选项
因此,我想问一下是否有人可以提供易于理解的一步一步的指示 关于如何安装从上面的链接下载的BOOST库。 像.....
......等等......
非常感谢任何有用的信息。
此处附加的新内容 回应给出的评论
嗨,我查看了您的链接提供的信息 设法运行链接给出的boost库示例。 也就是说,我可以使用命令
编译单个cpp文件g++ -I boost_1_33_0 test.cpp -o test
(我正在保持boost库和cpp文件的编译 同一文件夹)
但是,我感兴趣的程序包是用make(而不是cmake)构建的。 我有一些写cmake文件但没有make文件的经验。 而且我没有在make文件中看到任何提升库命令的链接 程序包。自述文件只有一个句子,上面写着我 需要在不解释其含义的情况下安装增强器。
我认为这意味着要么我必须构建并执行makeinstall升级或 我可以在makefile中为链接添加一些行。我想 也许你可以快速指出makefile中缺少什么。
自述文件:
要编译,请进入moses目录并执行'make'。你需要的 最新的推动库。如果由于奇怪的原因编译仍然失败, 你可以尝试使用-fpermissive的g ++(较新的版本拒绝很多 与较旧的代码一样好的代码)。如果你要做 经常更改和重新编译你可能想要禁用-O3 在makefile中(我自由地使用模板,所以-O3真的加速了 代码,但真的减慢了编译速度。)
和makefile:
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 :(得分: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),它会变得更加复杂......
请注意,多年来构建过程已发生变化;您不应该使用相同的过程来获得更新的升级版本。这正是我当时使用的。
修改强>
至于问题的第二部分,如果在标准系统目录中安装了boost ,则Makefile不需要显式引用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
或某些),它似乎只使用Boost 标题,这将使-L /path/to/boost/libs
部分(实际上,上面详述的整个编译步骤)是多余的。您应该能够通过简单地解压缩源并使用-I /path/to/boost/headers
将头目录作为附加的包含目录来实现。