【问题标题】:trouble installing old 2005 BOOST library安装旧的 2005 BOOST 库时遇到问题
【发布时间】:2013-11-26 11:29:25
【问题描述】:

大家好

虽然我是 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
  • 第二步:在 home/boost/ 中解压,然后输入 make configure

...等等...

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

此处添加新内容 响应给定的cmets

您好,我浏览了您的链接提供的信息,然后 设法运行您的链接给出的boost库示例。 也就是我可以用命令编译单个cpp文件

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

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

但是,我感兴趣的程序包是使用 make(而不是 cmake)构建的。 我有一些编写 cmake 文件但没有编写文件的经验。 而且我在 make 文件中看不到任何指向 boost 库命令的链接 程序包。自述文件只有一句话说我 需要安装 boost 而不解释这是什么意思。

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

自述文件:

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

【问题讨论】:

  • 您需要需要为您的项目编译的库,还是只需要模板库?因为在第一种情况下,您可以忽略 boost 编译。否则,请查看 boost.org/doc/libs/1_35_0/more/getting_started/…,这是更新的文档。
  • 非常抱歉回复晚了!我没有收到对我的问题发表评论的通知,也没有意识到我得到了回复。简单来说就是我感兴趣的软件包是用cmake编译的。当我在文件夹 bin 中键入 cmake.. 时,系统通知我 boost 丢失。我想这是你回复的第一个案例?我会检查你发送的信息。但请告诉我其他可能有用的信息
  • 缺少什么?头文件或库?也许你应该在 cmake 中放置一些变量来指定头文件和库路径。
  • 缺少标题,很多。我检查了您发送的信息链接。我也许可以自己运行它。我会尽快更新这个页面,我得到了一些结果。再次,非常感谢您的回复。
  • 你好,我把我的回答放在问题部分,评论部分太长了

标签: c++ ubuntu boost


【解决方案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如果 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 headers,这将使 -L /path/to/boost/libs 部分(并且,实际上,上面详述的整个编译步骤)是多余的。您应该能够通过简单地解压源代码并使用 -I /path/to/boost/headers 将标头目录作为附加包含目录来摆脱困境。

【讨论】:

  • 万岁!!!我设法让它运行!感谢一千的指示!希望这也对其他人有所帮助。我有最后一个问题,为了为 GDB 设置调试标志,我应该在哪里设置“-g”标志?它是在 make 文件的第一行后面,例如:“CC=g++ -g”吗?顺便说一句:与我使用的 BOOST_1_33_1 的唯一区别是 build.sh 脚本和 bjam 位于不同的文件夹中。并且 threading=multi 在编译期间从系统中给出“不知道该怎么做”。
猜你喜欢
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2020-08-14
  • 1970-01-01
  • 2015-01-12
  • 2014-09-11
  • 2013-12-24
相关资源
最近更新 更多