安装旧的2005 BOOST库时出现问题



Gooday everyone

我是ubuntu C编程的新手,尽管我在windows中的C编程方面经验丰富。

我最近遇到了一些编写的代码2005年,我有兴趣了解它们是如何工作的。

这些代码需要BOOST库来编译,但它们不会在我的ubuntu 12.04上的最新BOOST版本上编译。我将gcc编译器设置为宽松,这样它就可以忽略所有这些错误消息。代码确实进行了编译并在之后运行。

然而,当我使用GDB调试器来观察程序的流程时我注意到程序运行的方式可能有错误由于使用了不同的BOOST版本,而不是原来的版本。因此我喜欢安装与我下载的代码相对应的BOOST版本。

为此,我安装了Ubuntu 5.04和BOOST 1.33.0,它们似乎是在2005年末创建的。我下载了它但是我没有找到任何关于如何安装它的详细说明。只有关于使用BOOST果酱的模糊描述,我玩了BOOST很长一段时间都没有成功。而且这个旧的BOOST没有像"sudo apt-install-boost-dev"风格选项

因此,我想问是否有人能给出一个简单易懂的循序渐进的指导关于如何安装从上述链接下载的BOOST库。喜欢

  • 步骤1:从boost网页下载boost果酱
  • 步骤2:在home/boost/然后键入make-configure

等等…

非常感谢您提供任何有用的信息。

此处附加新内容针对给出的评论

嗨,我浏览了你的链接提供的信息设法运行了您的链接提供的boost库示例。也就是说,我可以用命令编译一个cpp文件

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

(我将boost库和要编译的cpp文件保存在相同文件夹)

然而,我感兴趣的程序包是用make(而不是cmake)构建的。我有一些写cmake文件的经验,但没有制作文件。在程序包。自述文件只有一句话,上面写着需要安装boost而不解释这意味着什么。

我想这意味着要么我必须构建并进行makeinstall提升,要么我可以在makefile中添加一些行作为链接。我想也许您可以快速指出makefile中缺少的内容。

自述文件:

要编译,请进入moses目录并执行"make"。你需要最新的boost库。如果由于奇怪的原因编译仍然失败,你可以用-fpermission来尝试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.........

我有一个关于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.Locare),它会变得更复杂。。。

请注意,多年来,构建过程发生了变化;对于更新的boost版本,您不应该使用相同的过程。这正是我当时使用的。

编辑:

至于问题的第二部分,如果Boost安装在标准系统目录中,Makefile不需要显式引用Boost。

编译时不必声明-I /usr/include,因为它是自动搜索的;在链接期间CCD_ 9也是如此。

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将头目录作为额外的include目录。

最新更新