编译程序加速 [英] Compile Boost Program

查看:159
本文介绍了编译程序加速的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法理解编译提振计划的基本知识。我在Fedora 15个,通过在/ usr / include中/升压yum的安装提升。我安装了增压版本也是如此。

我真的很想知道如何与升压库链接和终端下编译下面的例子中,并与升压果酱/建造。

  //
// reference_counted.cpp
// ~~~~~~~~~~~~~~~~~~~~~
//
//版权所有(C)2003-2011克里斯托弗·M. Kohlhoff(克里斯在kohlhoff点com)
//
// boost软件许可证1.0版下分发。 (见所附
//文件LICENSE_1_0.txt或http://www.boost.org/LICENSE_1_0.txt复制)
//#包括LT&;升压/ asio.hpp>
#包括LT&;升压/ bind.hpp>
#包括LT&;升压/ enable_shared_from_this.hpp>
#包括LT&;升压/ shared_ptr.hpp>
#包括LT&;&iostream的GT;
#包括LT&;矢量>使用boost ::支持ASIO ::知识产权:: TCP;//一个引用计数的不可修改的缓冲区类。
类shared_const_buffer
{
上市:
  //从一个std ::字符串构造。
  明确shared_const_buffer(常量标准::字符串&安培;数据)
    :data_中的数据(新的std ::矢量<&字符GT;(data.begin(),data.end()))
      buffer_(提高:: ASIO ::缓​​冲区(* data_中的数据))
  {
  }  //实施ConstBufferSequence要求。
  TYPEDEF提高:: ASIO :: const_buffer value_type的;
  的typedef常量的boost ::支持ASIO :: const_buffer *为const_iterator;
  常量的boost ::支持ASIO :: const_buffer *开始()const的{返回&放大器; buffer_; }
  常量的boost ::支持ASIO :: const_buffer *结束()const的{返回&放大器; buffer_ + 1; }私人的:
  提高:: shared_ptr的<的std ::矢量<&字符GT; >数据_;
  提高:: ASIO :: const_buffer buffer_;
};堂课
  :公众的boost :: enable_shared_from_this<会议>
{
上市:
  会话(提高:: ASIO :: io_service对象和放大器; io_service对象)
    :socket_(io_service对象)
  {
  }  TCP ::插座及放大器;插座()
  {
    返回socket_;
  }  无效的start()
  {
    使用命名空间std; //为time_t的,时间和的ctime。
    time_t的现在=时间(0);
    shared_const_buffer缓冲(的ctime(安培;现在));
    提高:: ASIO :: async_write(socket_,缓冲,
        提高::绑定(安培;会议:: handle_write,shared_from_this()));
  }  无效handle_write()
  {
  }私人的:
  //用于与客户端进行通信的套接字。
  TCP ::插座socket_;
};TYPEDEF提高:: shared_ptr的<会议> session_ptr;级服务器
{
上市:
  服务器(提高:: ASIO :: io_service对象和放大器; io_service对象,短端口)
    :io_service_(io_service对象)
      acceptor_(io_service对象,TCP ::端点(TCP :: V4(),口))
  {
    session_ptr new_session(新的会话(io_service_));
    acceptor_.async_accept(new_session->插座(),
        提高::绑定(安培;服务器:: handle_accept,为此,new_session,
          提高:: ASIO ::占位符::错误));
  }  无效handle_accept(session_ptr new_session,
      常量的boost ::系统::错误_ code&放;错误)
  {
    如果(!错误)
    {
      new_session->启动();
      new_session.reset(新的会话(io_service_));
      acceptor_.async_accept(new_session->插座(),
          提高::绑定(安培;服务器:: handle_accept,为此,new_session,
            提高:: ASIO ::占位符::错误));
    }
  }私人的:
  提高:: ASIO :: io_service对象和放大器; io_service_;
  TCP ::受acceptor_;
};INT主(INT ARGC,CHAR *的argv [])
{
  尝试
  {
    如果(的argc!= 2)
    {
      的std :: CERR<< 用法:reference_counted<港口> \\ N的;
      返回1;
    }    提高:: ASIO :: io_service对象io_service对象;    使用命名空间std; //为的atoi。
    服务器S(io_service对象,与atoi(ARGV [1]));    io_service.run();
  }
  赶上(性病::例外急症)
  {
    的std :: CERR<< 例外:<< e.what()&所述;&下; \\ n;
  }  返回0;
}

由于这里是要求误差的巨块:

  /tmp/ccvtengY.o:在功能`__static_initialization_and_destruction_0(INT,INT):
。example.cpp :(文字+ 0x182):未定义的引用`的boost ::系统:: generic_category()
。example.cpp :(文字+ 0x18e):未定义的引用`的boost ::系统:: generic_category()
example.cpp :(文字+ 0x19a):未定义的引用`的boost ::系统:: system_category()
/tmp/ccvtengY.o:在函数'的boost ::系统::错误_ code ::错误_ code():
example.cpp :( text._ZN5boost6system10error_ codeC2Ev [_ZN5boost6system10error_ codeC5Ev] + 0x17已):未定义的引用`的boost ::系统:: system_category()
/tmp/ccvtengY.o:在功能`提高:: ASIO ::错误:: get_system_category():
example.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x5):未定义的引用`的boost ::系统:: system_category()
/tmp/ccvtengY.o:在功能`提高:: ASIO ::详细:: posix_tss_ptr_cr​​eate(unsigned int类型和放大器;):
example.cpp:(.text._ZN5boost4asio6detail20posix_tss_ptr_createERj[boost::asio::detail::posix_tss_ptr_create(unsigned INT和放大器;)] +的0x19):未定义的参考`pthread_key_create
/tmp/ccvtengY.o:在功能`boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::~posix_tss_ptr()':
example.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED5Ev]+0x15):未定义的引用`pthread_key_delete
/tmp/ccvtengY.o:在功能`boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::operator提高:: ASIO ::详细:: CALL_STACK&LT;提高:: ASIO ::详细:: task_io_service&GT; ::中*()const的:
example.cpp:(.text._ZNK5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEEcvPS6_Ev[boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::operator提高:: ASIO ::详细:: CALL_STACK&LT;提高:: ASIO ::详细:: task_io_service&GT; ::中*()const的] +为0x15):未定义的参考`pthread_getspecific
/tmp/ccvtengY.o:在功能`boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::strand_service::strand_impl>::context>::~posix_tss_ptr()':
example.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED5Ev]+0x15):未定义的引用`pthread_key_delete
/tmp/ccvtengY.o:在功能`boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::operator=(boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context*)':
example.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEEaSEPS6_[boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::operator=(boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context*)]+0x20):未定义的引用`pthread_setspecific
collect2:劳工处返回1退出状态


解决方案

它编译罚款,我和 G ++ -lboost_system-MT -pthread

I'm having trouble understanding the basics of compiling a boost program. I'm working with Fedora 15, with boost installed through yum in /usr/include/boost. I have boost build installed as well.

I'd really like to know how to link with the boost library and compile the following example under the terminal, and with boost-jam/build.

//
// reference_counted.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 <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/shared_ptr.hpp>
#include <iostream>
#include <vector>

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

// A reference-counted non-modifiable buffer class.
class shared_const_buffer
{
public:
  // Construct from a std::string.
  explicit shared_const_buffer(const std::string& data)
    : data_(new std::vector<char>(data.begin(), data.end())),
      buffer_(boost::asio::buffer(*data_))
  {
  }

  // Implement the ConstBufferSequence requirements.
  typedef boost::asio::const_buffer value_type;
  typedef const boost::asio::const_buffer* const_iterator;
  const boost::asio::const_buffer* begin() const { return &buffer_; }
  const boost::asio::const_buffer* end() const { return &buffer_ + 1; }

private:
  boost::shared_ptr<std::vector<char> > data_;
  boost::asio::const_buffer buffer_;
};

class session
  : public boost::enable_shared_from_this<session>
{
public:
  session(boost::asio::io_service& io_service)
    : socket_(io_service)
  {
  }

  tcp::socket& socket()
  {
    return socket_;
  }

  void start()
  {
    using namespace std; // For time_t, time and ctime.
    time_t now = time(0);
    shared_const_buffer buffer(ctime(&now));
    boost::asio::async_write(socket_, buffer,
        boost::bind(&session::handle_write, shared_from_this()));
  }

  void handle_write()
  {
  }

private:
  // The socket used to communicate with the client.
  tcp::socket socket_;
};

typedef boost::shared_ptr<session> session_ptr;

class server
{
public:
  server(boost::asio::io_service& io_service, short port)
    : io_service_(io_service),
      acceptor_(io_service, tcp::endpoint(tcp::v4(), port))
  {
    session_ptr new_session(new session(io_service_));
    acceptor_.async_accept(new_session->socket(),
        boost::bind(&server::handle_accept, this, new_session,
          boost::asio::placeholders::error));
  }

  void handle_accept(session_ptr new_session,
      const boost::system::error_code& error)
  {
    if (!error)
    {
      new_session->start();
      new_session.reset(new session(io_service_));
      acceptor_.async_accept(new_session->socket(),
          boost::bind(&server::handle_accept, this, new_session,
            boost::asio::placeholders::error));
    }
  }

private:
  boost::asio::io_service& io_service_;
  tcp::acceptor acceptor_;
};

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 2)
    {
      std::cerr << "Usage: reference_counted <port>\n";
      return 1;
    }

    boost::asio::io_service io_service;

    using namespace std; // For atoi.
    server s(io_service, atoi(argv[1]));

    io_service.run();
  }
  catch (std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }

  return 0;
}

As requested here is the giant block of error:

/tmp/ccvtengY.o: In function `__static_initialization_and_destruction_0(int, int)':
example.cpp:(.text+0x182): undefined reference to `boost::system::generic_category()'
example.cpp:(.text+0x18e): undefined reference to `boost::system::generic_category()'
example.cpp:(.text+0x19a): undefined reference to `boost::system::system_category()'
/tmp/ccvtengY.o: In function `boost::system::error_code::error_code()':
example.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()'
/tmp/ccvtengY.o: In function `boost::asio::error::get_system_category()':
example.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x5): undefined reference to `boost::system::system_category()'
/tmp/ccvtengY.o: In function `boost::asio::detail::posix_tss_ptr_create(unsigned int&)':
example.cpp:(.text._ZN5boost4asio6detail20posix_tss_ptr_createERj[boost::asio::detail::posix_tss_ptr_create(unsigned int&)]+0x19): undefined reference to `pthread_key_create'
/tmp/ccvtengY.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::~posix_tss_ptr()':
example.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED5Ev]+0x15): undefined reference to `pthread_key_delete'
/tmp/ccvtengY.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::operator boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context*() const':
example.cpp:(.text._ZNK5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEEcvPS6_Ev[boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::operator boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context*() const]+0x15): undefined reference to `pthread_getspecific'
/tmp/ccvtengY.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::strand_service::strand_impl>::context>::~posix_tss_ptr()':
example.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED5Ev]+0x15): undefined reference to `pthread_key_delete'
/tmp/ccvtengY.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::operator=(boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context*)':
example.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEEaSEPS6_[boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::operator=(boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context*)]+0x20): undefined reference to `pthread_setspecific'
collect2: ld returned 1 exit status

解决方案

It compiles fine for me with g++ -lboost_system-mt -pthread.

这篇关于编译程序加速的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆