boostコンパイルasioプログラム、簡単なsocketプログラミング
7689 ワード
自分で初めてboostを游んで、C++に対してもとても熟知していないで、自分の学习の过程を记录します.
インストールコンパイル
boostパッケージを/optに解凍
まずb 2を生成するスクリプトを実行する
コンパイルboostとインストール
インストールが完了すると、/usr/local/libに保存されます.so与aファイル、ヘッダファイルは/usr/local/include/boost/パスの下に保存
参考記事:http://www.cnblogs.com/hcfalan/archive/2011/02/23/1962657.html
このブログはコードと原理を説明することはできませんが、簡単に学習手順を記録します.
コードはほとんど参考記事に直接貼られています.
コンパイルコマンド:
私はネット上で探しているboost socketのプログラミングの中で、すべてコードを貼ることを指して、コンパイルの命令も出していないことを発見して、白さんあるいは初めて接触したことに対して、コンパイルはすべて1本のハードルです.
-I/usr/local/include/boost
boostのヘッダファイルパスです
-L/usr/local/lib
boostです.soファイルパス
-lboost_system
これはネットで探したもので、コンパイル時に使うライブラリを指定しています
これを追加しないと、次のエラーが発生します.
boostライブラリに環境変数が追加されていない場合は、実行が間違っています.
ライブラリ依存関係の表示:
適切なライブラリが正しく見つからない場合は、
libboost_system.so.1.55.0 => not found
環境変数を増やす
ldd testを再実行すると、依存するライブラリが見つかりました.
このとき、コンパイルしたばかりのプログラムを実行することができます.
インストールコンパイル
boostパッケージを/optに解凍
tar -zxvf /media/C06EDE596EDE47B4/mnt/boost_1_55_0.tar.gz -C /opt
まずb 2を生成するスクリプトを実行する
/opt/boost_1_55_0/bootstrap.sh
コンパイルboostとインストール
/opt/boost_1_55_0/b2 && /opt/boost_1_55_0/b2 install
インストールが完了すると、/usr/local/libに保存されます.so与aファイル、ヘッダファイルは/usr/local/include/boost/パスの下に保存
参考記事:http://www.cnblogs.com/hcfalan/archive/2011/02/23/1962657.html
このブログはコードと原理を説明することはできませんが、簡単に学習手順を記録します.
#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;
#define BLOCK_SIZE 64*1024
int main(int argc, char* argv[])
{
// asio io_service
io_service iosev;
ip::tcp::acceptor acceptor(iosev,
ip::tcp::endpoint(ip::tcp::v4(), 1000));
for(;;)
{
// socket
ip::tcp::socket socket(iosev);
//
acceptor.accept(socket);
//
std::cout << "client from: "
<< socket.remote_endpoint().address() << std::endl;
boost::system::error_code ec;
//
char buf[BLOCK_SIZE];
int len = socket.read_some(buffer(buf), ec);
// read_until
//
if (ec)
{
std::cout <<
boost::system::system_error(ec).what() << std::endl;
break;
}
std::cout.write(buf, len);
std::cout << len << std::endl;
//Sleep(1000);
//
len = socket.write_some(buffer(buf, len), ec);
if(ec)
{
std::cout <<
boost::system::system_error(ec).what() << std::endl;
break;
}
std::cout << "writed " << len << std::endl;
//
}
return 0;
}
コードはほとんど参考記事に直接貼られています.
コンパイルコマンド:
g++ testSocketServer.cpp -lboost_system -I/usr/local/include/boost -L/usr/local/lib -o test
私はネット上で探しているboost socketのプログラミングの中で、すべてコードを貼ることを指して、コンパイルの命令も出していないことを発見して、白さんあるいは初めて接触したことに対して、コンパイルはすべて1本のハードルです.
-I/usr/local/include/boost
boostのヘッダファイルパスです
-L/usr/local/lib
boostです.soファイルパス
-lboost_system
これはネットで探したもので、コンパイル時に使うライブラリを指定しています
これを追加しないと、次のエラーが発生します.
testSocketServer.cpp:(.text+0x447): undefined reference to `boost::system::generic_category()'
testSocketServer.cpp:(.text+0x451): undefined reference to `boost::system::generic_category()'
testSocketServer.cpp:(.text+0x45b): undefined reference to `boost::system::system_category()'
/tmp/ccUZPY7m.o: In function `boost::system::error_code::error_code()':
testSocketServer.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x10): undefined reference to `boost::system::system_category()'
/tmp/ccUZPY7m.o: In function `boost::asio::error::get_system_category()':
testSocketServer.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x7): undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
boostライブラリに環境変数が追加されていない場合は、実行が間違っています.
ライブラリ依存関係の表示:
ldd test
適切なライブラリが正しく見つからない場合は、
libboost_system.so.1.55.0 => not found
環境変数を増やす
BOOST_ROOT=/opt/boost_1_55_0
BOOST_LIB=/usr/local/lib
BOOST_INCLUDE=/usr/local/include/boost
LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
export BOOST_ROOT BOOST_LIB BOOST_INCLUDE LD_LIBRARY_PATH
ldd testを再実行すると、依存するライブラリが見つかりました.
このとき、コンパイルしたばかりのプログラムを実行することができます.