编译程序加速 [英] Compile Boost Program
本文介绍了编译程序加速的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我无法理解编译提振计划的基本知识。我在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_create(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屋!
查看全文