2

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"

Web サイトの html コードを正常に表示します。

この例を Xcode にインポートしようとすると、問題が発生します。ヘッダー ファイルとバイナリの正しい検索パスを含めました。コードはコンパイルされますが、この行に到達するたびに Xcode がクラッシュします。

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

この行とそれ以降のすべてをコメント アウトすると、プログラムがコンパイルされて実行されます。そうしないと、ブレークポイントを使用しようとしてもクラッシュします。任意の提案をいただければ幸いです。

4

1 に答える 1

1

これは、URI パーサーがデバッグ ビルドで非常に大きなシンボルを生成するためです。URI 解析で Boost.Spirit を使用すると、非常に重いテンプレート メタプログラミングが使用され、システムによって適切に処理されない可能性がある非常に長いシンボルとして表示されます。私は cpp-netlib の通常の開発に Xcode IDE を使用していないため、回避策があるかどうかはわかりません。

于 2015-07-17T07:06:43.960 に答える