【问题标题】:How do I build the boost "Getting Started" examples using XCode?如何使用 XCode 构建提升“入门”示例?
【发布时间】:2009-12-10 17:21:55
【问题描述】:

假设您想构建 Boost“入门”示例并使用 Xcode 项目链接到它们,而不是在命令行中构建。您尝试仅标头选项,它工作正常。

然后你拿例子来源:

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );

    while (std::cin)
    {
        std::getline(std::cin, line);
        boost::smatch matches;
        if (boost::regex_match(line, matches, pat))
            std::cout << matches[2] << std::endl;
    }
}

然后您执行以下操作:

  1. 使用 ./bjam install 构建 boost 库
  2. 打开 Xcode 并创建一个新的 C++ 命令行实用程序项目。
  3. 将 libboost_regex.dylib 拖到 Groups & Files 树视图中的 Products 文件夹中(选中允许它复制文件的选项)
  4. 设置项目选项,使标题搜索路径指向 Boost 包含文件夹
  5. 构建并运行项目!

遗憾的是,如果您打开控制台(运行 | 控制台),您将看到一个错误,即找不到 dylib:

dyld: Library not loaded: libboost_regex.dylib
  Referenced from: /Users/matt/Documents/Boost/test/GettingStarted/build/Debug/GettingStarted
  Reason: image not found

所以,不知道有更好的方法让 Xcode 执行此操作,您将 dylib 复制到 your_project/build/debug/ 中,然后它就会运行!万岁!

你是一个注重细节的人,你在标准输入中输入一些东西来尝试一下:

> Subject: foo bar baz
> foo bar baz

然后它会出现段错误。

Program received signal:  “EXC_BAD_ACCESS”.

确认!

但不要害怕。我知道问题是什么!如果没有人超过我,我会在午餐后发布解决方案。

【问题讨论】:

    标签: regex xcode boost


    【解决方案1】:

    这里的问题是 boost 的默认构建与您项目的调试构建不兼容。您需要使用调试变体构建 boost,方法如下:

    ./bjam install variant=debug define=_GLIBCXX_DEBUG --with-regex
    

    _GLIBCXX_DEBUG 实际上是 Xcode 项目中导致冲突的选项。

    然后您可以将库的调试版本与您的调试 Xcode 项目链接。 (我认为这就是 MacPorts 预编译二进制文件的生成方式。)

    请记住,您可以使用 bjam 变体同时构建多个目标。

    另外:如果重建后它不起作用,请检查以确保您要链接的库的版本实际上是您刚刚重建的那个!

    另外:相反,从调试配置中删除 _GLIBCXX_DEBUG 定义可能会起作用。双击 Targets 中的可执行文件以打开项目选项,然后从预处理器宏中删除 _GLIBCXX_DEBUG

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我有同样的错误。我忘记创建“复制文件”构建阶段并复制框架。

      转到项目导航器中的第一个按钮以显示您的文件

      单击您的项目以编辑项目设置 单击您正在使用 boost 库的目标 单击右下角的“添加构建阶段”按钮 选择“添加复制文件” 将弹出窗口中的“目标”更改为“框架” 将 libboost_regex.dylib 从项目导航器拖到复制文件表中

      图片链接对于屏幕截图不起作用: http://imgur.com/a/8ojye#6

      【讨论】:

      • 我想如果复制没有发生,它可能与库的不同(非调试)版本链接,这可以解释为什么添加复制步骤可以修复它。
      猜你喜欢
      • 1970-01-01
      • 2017-04-27
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多