c++ - 如何配置 Qt Creator 以在 Windows 中使用 Boost

标签 c++ qt boost

我在 Ubuntu 中创建了一个 Qt 项目,一切都很顺利。但是,我还需要在 Windows 上部署它。它使用 Boost 库(大问题)。

我花了好几个小时寻找解决方案,但没有成功。我尝试安装 Boost 库并将其与 mingw 链接;我想我错过了什么。这是我所做的并下载了最新版本:

1) 运行 .\bootstrap
2) 然后 .\b2 --prefix=C:\boost install

遗憾的是没有正确安装。我只有 2 个文件夹(bin 和 share)但没有标题。

但是,在这里(http://nuwen.net/)我找到了一个包(Mingw+Boost 和其他库)。这有我需要的一切。

现在我认为问题出在 .pro 文件上,因为我有很多 undefined reference 。这是包含我尝试过的所有内容的 .pro 文件(一些评论): http://pastebin.com/pBFMTAd8

感谢您的帮助!

最佳答案

我确实自己解决了这个问题。这就是我的做法。首先,需要使用您在 Qt 中使用的相同编译器编译 boost 库。
如果您使用的是 msvc,那么您很幸运,因为 Boost 人员帮了您一个忙,并为您编译了库。您可以在这里下载它们:http://sourceforge.net/projects/boost/files/boost-binaries/ .
如果您使用的是 mingw(它与 Qt 捆绑在一起),您可以这样做:

  • 将 mingw 编译器添加到 Windows PATH 变量:
    ~进入控制面板并搜索系统;
    ~ 将mingw的路径(例如C:\Qt\Tools\mingw\bin)通过附加';'添加到PATH变量到你的路径(例如:“;C:\Qt\Tools\mingw\bin”)
  • 编译 Boost 库:
    ~解压boost存档
    ~打开命令行窗口,进入解压后的boost文件夹,然后进入文件夹tools/build/v2/engine
    ~ 你已经使用 mingw 工具集构建了安装程序:.\build --toolset=mingw
    ~ 这将在文件夹 bin.ntx86 或类似的文件夹中创建 2 个文件;复制解压后的boost文件夹中的bjam和b2文件;
    ~ 现在进入 boost 文件夹并开始构建它:.\b2 --toolset=mingw --build-type=complete stage(有很好的教程可以将它与 eclipse 一起安装:http://theseekersquill.wordpress.com/2010/08/24/howto-boost-mingw/)
    注意:这将需要几个小时,因此您可能想在此期间看电影或做您想做的事情。但是,您可以选择通过向构建命令添加另一个参数来稍微加快速度:-j N,其中 N 是您的处理器有多少个内核。
  • 构建完成后,您现在可以在 Qt 中链接库。为此,您需要修改 .pro 文件。首先,您必须告诉 Qt header 位于何处,您可以通过添加以下内容来实现:
    INCLUDEPATH += path_to_boost_folder,例如: 包含路径 += C:/boost_1_54_0
    ~如果你使用需要链接的库,例如系统和文件系统,你必须分别链接它们:
    LIBS += "C:/boost_1_54_0/stage/lib/libboost_filesystem-mgw48-1_54.a",
    LIBS += "C:/boost_1_54_0/stage/lib/libboost_system-mgw48-1_54.a"
  • 修改.pro文件后,运行qmake,然后重建。

希望这对你也有用!

更新:文件夹层次结构发生了变化。要构建库,应该阅读与每个版本相关的文档和 Boost.Build's documentation . 从根文件夹构建库更容易 ( Building Boost 1.52 with MinGW ):

C:\boost_1_60_0> bootstrap.bat mingw  
C:\boost_1_60_0> .\b2 --toolset=gcc -j N --build-type=complete

关于c++ - 如何配置 Qt Creator 以在 Windows 中使用 Boost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18562603/

相关文章:

c++ - 为什么结构的 sizeof 不等于每个成员的 sizeof 之和?

c++ - 使用Lamda从QWebEngineView中的QWebEnginePage获取HTML

c++ - 重复时禁用按键事件

c++ - 为什么 `std::prev` 不会引发 `std::unordered_set` 迭代器的错误?

c++ - VS2010中的boost::function:错误C2039: 'function':不是 'boost'的成员

c++ - 带矩阵的赋值运算符(=)返回垃圾值

c++ - 全局 std::string 在 iOS 上导致崩溃

c++ - 尝试将元组推回 const vector 时出错

python - 在 OSX 中,将应用程序名称从 "python"更改为

c++ - 如何将 boost::shared_ptr<> 变成引用 (&)?