错误:错误指令“dmb”编译Boost示例时

发布于 2024-11-18 22:01:59 字数 9343 浏览 1 评论 0原文

我正在尝试编译 Boost asio 示例 async_client.cpp(包含在 boost 1.46.1 包中),然后出现以下错误:

make -S all 
Building file: ../boostTest.cpp
Invoking: GCC C++ Compiler
/opt/Mx800SDK/vfitc/cross/bin/arm-linux-g++ -DMx870 -I/opt/Mx800SDK/vfitc/cross/arm-linux/include -I../include -I/opt/Mx800SDK/include -I/opt/Mx800SDK/include/libfp -I/opt/Mx800SDK/include/libfp/effects -I/opt/Mx800SDK/include/libfp/media -O2 -Wall -c -fmessage-length=0 -fno-strict-aliasing -o'boostTest.o' '../boostTest.cpp'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s: Assembler messages:
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:25902: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:25942: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:26014: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:26253: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:26288: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:26318: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:29734: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:29771: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:30433: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:32625: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:33067: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:33427: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:33973: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:34418: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:34774: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:35346: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:35385: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:35415: Error: bad instruction `dmb'
make: *** [boostTest.o] Error 1

这是来自 boost 的示例代码:

//
// async_client.cpp
// ~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//

#include <iostream>
#include <istream>
#include <ostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/bind.hpp>

using boost::asio::ip::tcp;

class client
{
public:
  client(boost::asio::io_service& io_service,
      const std::string& server, const std::string& path)
    : resolver_(io_service),
      socket_(io_service)
  {
    // Form the request. We specify the "Connection: close" header so that the
    // server will close the socket after transmitting the response. This will
    // allow us to treat all data up until the EOF as the content.
    std::ostream request_stream(&request_);
    request_stream << "GET " << path << " HTTP/1.0\r\n";
    request_stream << "Host: " << server << "\r\n";
    request_stream << "Accept: */*\r\n";
    request_stream << "Connection: close\r\n\r\n";

    // Start an asynchronous resolve to translate the server and service names
    // into a list of endpoints.
    tcp::resolver::query query(server, "http");

    //--------------------------------------------------
    //**When I comment out this part, the error disappears.**
    //--------------------------------------------------
    resolver_.async_resolve(query,
        boost::bind(&client::handle_resolve, this,
          boost::asio::placeholders::error,
          boost::asio::placeholders::iterator));
    //--------------------------------------------------
    //--------------------------------------------------
  }

private:
  void handle_resolve(const boost::system::error_code& err,
      tcp::resolver::iterator endpoint_iterator)
  {
    if (!err)
    {
      // Attempt a connection to the first endpoint in the list. Each endpoint
      // will be tried until we successfully establish a connection.
      tcp::endpoint endpoint = *endpoint_iterator;
      socket_.async_connect(endpoint,
          boost::bind(&client::handle_connect, this,
            boost::asio::placeholders::error, ++endpoint_iterator));
    }
    else
    {
      std::cout << "Error: " << err.message() << "\n";
    }
  }

  void handle_connect(const boost::system::error_code& err,
      tcp::resolver::iterator endpoint_iterator)
  {
    if (!err)
    {
      // The connection was successful. Send the request.
      boost::asio::async_write(socket_, request_,
          boost::bind(&client::handle_write_request, this,
            boost::asio::placeholders::error));
    }
    else if (endpoint_iterator != tcp::resolver::iterator())
    {
      // The connection failed. Try the next endpoint in the list.
      socket_.close();
      tcp::endpoint endpoint = *endpoint_iterator;
      socket_.async_connect(endpoint,
          boost::bind(&client::handle_connect, this,
            boost::asio::placeholders::error, ++endpoint_iterator));
    }
    else
    {
      std::cout << "Error: " << err.message() << "\n";
    }
  }

  void handle_write_request(const boost::system::error_code& err)
  {
    if (!err)
    {
      // Read the response status line. The response_ streambuf will
      // automatically grow to accommodate the entire line. The growth may be
      // limited by passing a maximum size to the streambuf constructor.
      boost::asio::async_read_until(socket_, response_, "\r\n",
          boost::bind(&client::handle_read_status_line, this,
            boost::asio::placeholders::error));
    }
    else
    {
      std::cout << "Error: " << err.message() << "\n";
    }
  }

  void handle_read_status_line(const boost::system::error_code& err)
  {
    if (!err)
    {
      // Check that response is OK.
      std::istream response_stream(&response_);
      std::string http_version;
      response_stream >> http_version;
      unsigned int status_code;
      response_stream >> status_code;
      std::string status_message;
      std::getline(response_stream, status_message);
      if (!response_stream || http_version.substr(0, 5) != "HTTP/")
      {
        std::cout << "Invalid response\n";
        return;
      }
      if (status_code != 200)
      {
        std::cout << "Response returned with status code ";
        std::cout << status_code << "\n";
        return;
      }

      // Read the response headers, which are terminated by a blank line.
      boost::asio::async_read_until(socket_, response_, "\r\n\r\n",
          boost::bind(&client::handle_read_headers, this,
            boost::asio::placeholders::error));
    }
    else
    {
      std::cout << "Error: " << err << "\n";
    }
  }

  void handle_read_headers(const boost::system::error_code& err)
  {
    if (!err)
    {
      // Process the response headers.
      std::istream response_stream(&response_);
      std::string header;
      while (std::getline(response_stream, header) && header != "\r")
        std::cout << header << "\n";
      std::cout << "\n";

      // Write whatever content we already have to output.
      if (response_.size() > 0)
        std::cout << &response_;

      // Start reading remaining data until EOF.
      boost::asio::async_read(socket_, response_,
          boost::asio::transfer_at_least(1),
          boost::bind(&client::handle_read_content, this,
            boost::asio::placeholders::error));
    }
    else
    {
      std::cout << "Error: " << err << "\n";
    }
  }

  void handle_read_content(const boost::system::error_code& err)
  {
    if (!err)
    {
      // Write all of the data that has been read so far.
      std::cout << &response_;

      // Continue reading remaining data until EOF.
      boost::asio::async_read(socket_, response_,
          boost::asio::transfer_at_least(1),
          boost::bind(&client::handle_read_content, this,
            boost::asio::placeholders::error));
    }
    else if (err != boost::asio::error::eof)
    {
      std::cout << "Error: " << err << "\n";
    }
  }

  tcp::resolver resolver_;
  tcp::socket socket_;
  boost::asio::streambuf request_;
  boost::asio::streambuf response_;
};

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 3)
    {
      std::cout << "Usage: async_client <server> <path>\n";
      std::cout << "Example:\n";
      std::cout << "  async_client www.boost.org /LICENSE_1_0.txt\n";
      return 1;
    }

    boost::asio::io_service io_service;
    client c(io_service, argv[1], argv[2]);
    io_service.run();
  }
  catch (std::exception& e)
  {
    std::cout << "Exception: " << e.what() << "\n";
  }

  return 0;
}

有谁知道如何解决这个问题吗?

预先非常感谢您。 问候,

I'am trying to compile the Boost asio example, async_client.cpp(included in the boost 1.46.1 package) then I got the following error:

make -S all 
Building file: ../boostTest.cpp
Invoking: GCC C++ Compiler
/opt/Mx800SDK/vfitc/cross/bin/arm-linux-g++ -DMx870 -I/opt/Mx800SDK/vfitc/cross/arm-linux/include -I../include -I/opt/Mx800SDK/include -I/opt/Mx800SDK/include/libfp -I/opt/Mx800SDK/include/libfp/effects -I/opt/Mx800SDK/include/libfp/media -O2 -Wall -c -fmessage-length=0 -fno-strict-aliasing -o'boostTest.o' '../boostTest.cpp'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s: Assembler messages:
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:25902: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:25942: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:26014: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:26253: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:26288: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:26318: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:29734: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:29771: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:30433: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:32625: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:33067: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:33427: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:33973: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:34418: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:34774: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:35346: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:35385: Error: bad instruction `dmb'
/cygdrive/c/DOCUME~1/User/LOCALS~1/Temp/ccKberwZ.s:35415: Error: bad instruction `dmb'
make: *** [boostTest.o] Error 1

Here is the sample code from boost:

//
// async_client.cpp
// ~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//

#include <iostream>
#include <istream>
#include <ostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/bind.hpp>

using boost::asio::ip::tcp;

class client
{
public:
  client(boost::asio::io_service& io_service,
      const std::string& server, const std::string& path)
    : resolver_(io_service),
      socket_(io_service)
  {
    // Form the request. We specify the "Connection: close" header so that the
    // server will close the socket after transmitting the response. This will
    // allow us to treat all data up until the EOF as the content.
    std::ostream request_stream(&request_);
    request_stream << "GET " << path << " HTTP/1.0\r\n";
    request_stream << "Host: " << server << "\r\n";
    request_stream << "Accept: */*\r\n";
    request_stream << "Connection: close\r\n\r\n";

    // Start an asynchronous resolve to translate the server and service names
    // into a list of endpoints.
    tcp::resolver::query query(server, "http");

    //--------------------------------------------------
    //**When I comment out this part, the error disappears.**
    //--------------------------------------------------
    resolver_.async_resolve(query,
        boost::bind(&client::handle_resolve, this,
          boost::asio::placeholders::error,
          boost::asio::placeholders::iterator));
    //--------------------------------------------------
    //--------------------------------------------------
  }

private:
  void handle_resolve(const boost::system::error_code& err,
      tcp::resolver::iterator endpoint_iterator)
  {
    if (!err)
    {
      // Attempt a connection to the first endpoint in the list. Each endpoint
      // will be tried until we successfully establish a connection.
      tcp::endpoint endpoint = *endpoint_iterator;
      socket_.async_connect(endpoint,
          boost::bind(&client::handle_connect, this,
            boost::asio::placeholders::error, ++endpoint_iterator));
    }
    else
    {
      std::cout << "Error: " << err.message() << "\n";
    }
  }

  void handle_connect(const boost::system::error_code& err,
      tcp::resolver::iterator endpoint_iterator)
  {
    if (!err)
    {
      // The connection was successful. Send the request.
      boost::asio::async_write(socket_, request_,
          boost::bind(&client::handle_write_request, this,
            boost::asio::placeholders::error));
    }
    else if (endpoint_iterator != tcp::resolver::iterator())
    {
      // The connection failed. Try the next endpoint in the list.
      socket_.close();
      tcp::endpoint endpoint = *endpoint_iterator;
      socket_.async_connect(endpoint,
          boost::bind(&client::handle_connect, this,
            boost::asio::placeholders::error, ++endpoint_iterator));
    }
    else
    {
      std::cout << "Error: " << err.message() << "\n";
    }
  }

  void handle_write_request(const boost::system::error_code& err)
  {
    if (!err)
    {
      // Read the response status line. The response_ streambuf will
      // automatically grow to accommodate the entire line. The growth may be
      // limited by passing a maximum size to the streambuf constructor.
      boost::asio::async_read_until(socket_, response_, "\r\n",
          boost::bind(&client::handle_read_status_line, this,
            boost::asio::placeholders::error));
    }
    else
    {
      std::cout << "Error: " << err.message() << "\n";
    }
  }

  void handle_read_status_line(const boost::system::error_code& err)
  {
    if (!err)
    {
      // Check that response is OK.
      std::istream response_stream(&response_);
      std::string http_version;
      response_stream >> http_version;
      unsigned int status_code;
      response_stream >> status_code;
      std::string status_message;
      std::getline(response_stream, status_message);
      if (!response_stream || http_version.substr(0, 5) != "HTTP/")
      {
        std::cout << "Invalid response\n";
        return;
      }
      if (status_code != 200)
      {
        std::cout << "Response returned with status code ";
        std::cout << status_code << "\n";
        return;
      }

      // Read the response headers, which are terminated by a blank line.
      boost::asio::async_read_until(socket_, response_, "\r\n\r\n",
          boost::bind(&client::handle_read_headers, this,
            boost::asio::placeholders::error));
    }
    else
    {
      std::cout << "Error: " << err << "\n";
    }
  }

  void handle_read_headers(const boost::system::error_code& err)
  {
    if (!err)
    {
      // Process the response headers.
      std::istream response_stream(&response_);
      std::string header;
      while (std::getline(response_stream, header) && header != "\r")
        std::cout << header << "\n";
      std::cout << "\n";

      // Write whatever content we already have to output.
      if (response_.size() > 0)
        std::cout << &response_;

      // Start reading remaining data until EOF.
      boost::asio::async_read(socket_, response_,
          boost::asio::transfer_at_least(1),
          boost::bind(&client::handle_read_content, this,
            boost::asio::placeholders::error));
    }
    else
    {
      std::cout << "Error: " << err << "\n";
    }
  }

  void handle_read_content(const boost::system::error_code& err)
  {
    if (!err)
    {
      // Write all of the data that has been read so far.
      std::cout << &response_;

      // Continue reading remaining data until EOF.
      boost::asio::async_read(socket_, response_,
          boost::asio::transfer_at_least(1),
          boost::bind(&client::handle_read_content, this,
            boost::asio::placeholders::error));
    }
    else if (err != boost::asio::error::eof)
    {
      std::cout << "Error: " << err << "\n";
    }
  }

  tcp::resolver resolver_;
  tcp::socket socket_;
  boost::asio::streambuf request_;
  boost::asio::streambuf response_;
};

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 3)
    {
      std::cout << "Usage: async_client <server> <path>\n";
      std::cout << "Example:\n";
      std::cout << "  async_client www.boost.org /LICENSE_1_0.txt\n";
      return 1;
    }

    boost::asio::io_service io_service;
    client c(io_service, argv[1], argv[2]);
    io_service.run();
  }
  catch (std::exception& e)
  {
    std::cout << "Exception: " << e.what() << "\n";
  }

  return 0;
}

Anybody who knows how to solve this?

Thanks you very much in advance.
Regards,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文