使用MinGW和CodeBlocks安装Boost库

时间:2012-11-10 07:42:42

标签: c++ regex boost mingw

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

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

我有

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

但没有运气。有人可以帮我搞定吗?


更新

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

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

2 个答案:

答案 0 :(得分:6)

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

  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

  8. 现在你们都建成了。是时候设置CodeBlock了。

    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. 深呼吸,向你的上帝祈祷,然后开始测试。
    6. 可能有助于或混淆的进一步文档:

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

      祝你好运!

答案 1 :(得分:4)

我不确定自动构建的是什么意思。大多数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