在 Xcode 6 中运行 cpp-netlib - 编译但运行时崩溃

Posted

技术标签:

【中文标题】在 Xcode 6 中运行 cpp-netlib - 编译但运行时崩溃【英文标题】:Running cpp-netlib in Xcode 6 - compiles but crashes on run 【发布时间】:2015-04-10 23:13:47 【问题描述】:

我已经安装了 boost 和 cpp-netlib 并成功运行了所有测试。我可以使用以下选项从命令行编译以下示例:

clang++ -o test main.cpp \
-I/path.../cpp-netlib-0.11.1-final \
-I/path.../boost_1_57_0 \
-L/path.../boost_1_57_0/stage/lib \
-L/usr/local/lib \
-lboost_system \
-lboost_thread \
-lcppnetlib-uri \
-lcppnetlib-client-connections \
-lssl \
-lcrypto \
-pthread

来自 cpp-netlib.org 的示例:

#include <boost/network/protocol/http/client.hpp>
#include <iostream>

int main(int argc, char *argv[]) 
    using namespace boost::network;

    if (argc != 2) 
        std::cout << "Usage: " << argv[0] << " [url]" << std::endl;
        return 1;
    

    http::client client;
    http::client::request request(argv[1]);
    request << header("Connection", "close");
    http::client::response response = client.get(request);
    std::cout << body(response) << std::endl;

    return 0;

运行这个程序:

./test "url"

成功显示网站的html代码。

当我尝试将此示例导入​​ Xcode 时遇到问题。我已经包含了头文件和二进制文件的正确搜索路径。代码将编译,但每次到达此行时 Xcode 都会崩溃。

http::client::request request(argv[1]);

我可以注释掉这一行以及它之后的所有内容,然后程序编译并运行。否则它会崩溃,即使尝试使用断点也是如此。任何建议,将不胜感激。

【问题讨论】:

我在使用 Xcode 6.3.2 时遇到了同样的问题。 【参考方案1】:

这是因为 URI 解析器在调试版本中生成了非常大的符号。在 URI 解析中使用 Boost.Spirit 使用了非常繁重的模板元编程,并且显示为很长的符号,系统可能无法正确处理。我不确定这里是否有解决方法,因为我不使用 Xcode IDE 进行 cpp-netlib 的常规开发。

【讨论】:

以上是关于在 Xcode 6 中运行 cpp-netlib - 编译但运行时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

.Xib 在使用 Xcode 4.6.1 运行项目时产生错误

在 Xcode 6 中的 iOS 6 模拟器中运行应用程序

无法在 Simulator XCode 6.0 中运行应用程序

使用 Xcode6-Beta 运行 Xcode 5.1.1 项目

如何在 Xcode 6.0 Beta 中运行 iOS 7.1 模拟器?

Xcode 6 中是不是有键盘快捷键可以在光标下运行单个当前测试功能?