2

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

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

我有

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

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


更新

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

(此外,更改了问题的标题,因为事实证明它比我刚开始时更广泛。)

4

2 回答 2

6

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

  1. 下载 Boost zip,在某个地方解压缩(我会打电话给那个地方$boostdir
    • 解压后相当大,> 300MB
  2. 将 MinGW bin 添加到 PATH var
    • 当 Boost 构建时,它需要访问 MinGW 可执行文件
  3. 构建b2.exebjam.exe
    • Windows的文档愉快地假设 MSVC 编译器可用。
    • 如果是这样,您显然可以使用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 小时
    • 你会知道它是否有效。如果你认为有什么问题,那就是行不通。
    • 构建可以使用各种标志

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

  1. 将编译器指向头文件
    • 右键单击您的项目 -> 构建选项 -> 搜索目录选项卡 -> 编译器选项卡 -> 添加$boostdir地址
  2. Boost 已根据您当前的系统规范为您想要的库构建了一个 DLL。在stage\lib\目录中查找$boostdir
    • 此 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 网站有一个版本,直到我接近搜索结束时才找到。它相当有帮助,但有一些奇怪的东西。 这篇文章也很有帮助。

祝你好运!

于 2012-11-11T10:02:04.587 回答
4

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

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

于 2012-11-10T07:59:19.767 回答