【问题标题】:Installing Boost libraries with MinGW and CodeBlocks使用 MinGW 和 CodeBlocks 安装 Boost 库
【发布时间】:2012-11-10 07:42:41
【问题描述】:

我第一次接触 Boost 库,我选择了一个漂亮的女孩,名叫 Regex。

我已经在我的机器上安装了库(自动构建?),但我收到了上述错误(找不到-lboost_regex)。我将 Code::Blocks 与 MinGW 和 C++0X 编译器标志一起使用。

我有

  • 将“搜索目录”指向安装目录
  • -lboost_regex 标志添加到链接器

但没有运气。有人可以帮我完成这项工作吗?


更新

现在一切正常。对于这个问题的新手,我在下面的答案中添加了一些进一步的注释。

(另外,更改了问题的标题,因为它比我刚开始时更广泛。)

【问题讨论】:

  • '哪个自动构建?'我认为这是你的错误。 boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/…
  • 你做了什么来安装这些库?根据我的经验,你要么得到一个已经构建了库的 boost 包(例如使用 nuwen MinGW 发行版和 BoostPro 包或用于 MSVC boost 库的 boost.teeks99.com),要么你自己构建它们。我不熟悉“自动”构建它们的安装(尽管我很乐意了解这样的事情)。
  • 哦。可能就是这样。我刚刚下载了安装程序并运行了它。我以为我在某处读到它同时构建了所有东西。无论如何,我一直在尝试使用boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/… 来建立自己,但是出现了一系列新问题……我想我会把精力集中在那里。
  • 您必须将 Boost 库的路径添加到 Praetorian 指出的链接器的搜索路径中。顺便说一句,您在链接时是否收到此错误?
  • @SChepurin 是的,但事实证明我还没有构建这些库。我只是将变量添加到链接器,并将编译器指向头文件。

标签: c++ regex boost mingw


【解决方案1】:

这里有一些链接和提示,可以帮助新手,从我的第一次构建经验。我直接从 zip 文件构建了库。我在 MinGW 上构建,并在 IDE 中使用了 CodeBlocks。

  1. 下载 Boost zip,在某个地方解压缩(我会称那个地方为 $boostdir
    • 解压后相当大,> 300MB
  2. 将 MinGW bin 添加到 PATH var
    • 当 Boost 构建时,它需要访问 MinGW 可执行文件
  3. 构建b2.exebjam.exe
    • Windows 的documentation 愉快地assumes MSVC compiler 可用。
    • 如果是,您显然可以像文档说的那样使用bootstrap.bat
    • 如果不是(如我的那样),您必须在第 4 步和第 5 步中自己构建 exe 文件。
  4. 在 CMD 中,导航到 $boostdir/tools/build/v2/engine
  5. 运行build.bat mingw(将构建b2.exebjam.exe
  6. 现在您已经根据您的系统规格定制了b2bjam。导航回$boostdir 并准备开始构建库。
    • Boost 将在当前目录中创建一个新的bin.v2 目录。
    • 所有的库都将进入bin.v2
    • 出于某种原因,这是一个“中间”目录
    • 这一步没什么可做的,只是一些额外的信息:)
  7. 运行b2 toolset=gcc --build-type=complete
    • 这需要很长时间,大约 1 - 2 小时
    • 您会知道它是否有效。如果您认为有问题,那就是行不通。
    • 构建可以使用各种flags

现在你们都建好了。是时候设置代码块了。

  1. 将编译器指向头文件
    • 右击你的项目->构建选项->搜索目录选项卡->编译器选项卡->添加$boostdir地址
  2. Boost 已根据您当前的系统规范为您想要的库构建了一个 DLL。查看$boostdirstage\lib\目录
    • 此 DLL 稍后将在链接器中使用,因此请不要关闭其资源管理器窗口
    • 我在C:\Program Files\Boost_1_52\stage\lib\libboost_regex-mgw44-1_52.dll
    • 我认为文档有一个聪明的方法来做到这一点,但我还没有尝试过
    • 构建完成后,可以删除第 6 步中的“中间”目录
  3. 将链接器指向该 DLL 的目录
    • 右键单击您的项目 -> 构建选项 -> 搜索目录选项卡 -> 链接器选项卡 -> 添加 该目录地址 (blah\blah\blah\stage\lib\)
  4. 将该 DLL 标志添加到链接器设置中
    • 我的是-lboost_regex-mgw44-1_52
  5. 深呼吸,向你的上帝祈祷,开始测试。

可能有帮助或混淆的其他文档:

Code::Blocks 网站有a version of this,直到我接近搜索结束时才找到它。它相当有帮助,但有一些奇怪的东西。 This post 也很有帮助。

祝你好运!

【讨论】:

  • bootstrap.bat 在 Windows 上默认为 MSVC,但您可以通过运行 bootstrap.bat mingw 覆盖它,并省去导航到子目录的麻烦。
【解决方案2】:

我不确定您所说的自动构建是什么意思。大多数 Boost 库都是仅包含头文件的,但有一些,例如正则表达式,需要编译为共享/静态库。编译步骤不是自动的,您需要调用 Boost 构建系统 (bjam) 来执行此操作。当然,也有一些资源(例如 BoostPro)为各种平台分发预构建的 Boost 二进制文件。

完成后,您需要将库所在的路径添加到链接器的搜索路径中。对于 MinGW,此选项为 -L"path/to/library"。 Boost 确实有允许自动链接所需库的指令,这似乎与 MSVC 一起工作得很好,但我从来没有让它与 MinGW 一起工作。因此,您还必须列出要显式链接的库。默认情况下,Boost 库在文件名中包含目标和版本信息,因此对于 MinGW gcc 4.7 和 Boost 1.51,典型的链接器命令行选项类似于 -lboost_regex-mgw47-mt-1_51

【讨论】:

  • 哦,我现在明白了。该库必须根据所使用的编译器单独构建,因此 Boost 当然不会分发所有不同的构建。感谢您的帮助。
  • Boom 终于搞定了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 2013-04-18
  • 2011-12-12
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 2011-12-10
相关资源
最近更新 更多