gpt4 book ai didi

c++ - 安装旧的 2005 BOOST 库时遇到问题

转载 作者:行者123 更新时间:2023-11-28 07:16:05 26 4
gpt4 key购买 nike

大家好

虽然我是 ubuntu C 编程的新手在 Windows 中进行 C 编程方面经验丰富。

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

这些代码需要 BOOST 库来编译,但它们不会在我的 ubuntu 12.04 上出现的最新 BOOST 版本上编译。我将 gcc 编译器设置为 lenient 以便它忽略所有这些错误消息。代码确实编译并随后运行。

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

为此,我安装了 Ubuntu 5.04 和 BOOST 1.33.0,它们似乎是在 2005 年底创建的。我下载了它但我没有找到任何关于如何安装它的详细说明。关于使用 BOOST jam 只有模糊的描述,我玩过 BOOST果酱了很长一段时间没有成功。而且这个老BOOST没有安装命令之类的“sudo apt-install boost-dev”样式选项

所以我想问问有没有人能给出一个简单易懂的分步说明关于如何安装从上述链接下载的 BOOST 库。喜欢……

  • 第一步:从boost网页下载boost jam
  • step2: 在 home/boost/解压然后输入 make configure

……等等……

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

此处附加新内容回应给出的评论

您好,我查看了您的链接提供的信息,并且设法运行您的链接给出的 boost 库示例。也就是说,我可以使用命令编译单个 cpp 文件

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

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

不过,我感兴趣的程序包是用make构建的(不是cmake)。我有一些编写 cmake 文件的经验,但没有编写文件的经验。而且我在程序包。自述文件只有一句话说我需要在不解释其含义的情况下安装 boost。

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

自述文件:

To compile, go into the moses directory and do 'make'. You'll need the latest boost libraries. If compilation still fails for weird reasons, you could try g++ with the -fpermissive (newer versions reject lots of code that was ok with older ones). If you are going to be making changes and recompiling frequently you'll probably want to disable -O3 in the makefile (I use templates liberally, so -O3 really speeds up the code, but really slows down compilation).

和生成文件:

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 的旧指令,它是这样写的(项目特定的东西被切掉了):

  • 解压 boost 源
  • 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(仅 header ,或者通过在我的构建说明的 --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 headers,这将使-L/path/to/boost/libs 部分(实际上,上面详述的整个编译步骤)是多余的。您应该能够通过简单地解压缩源代码并使用 -I/path/to/boost/headers 将 header 目录作为附加包含目录来摆脱困境。

关于c++ - 安装旧的 2005 BOOST 库时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20215866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com