ラベル CentOS の投稿を表示しています。 すべての投稿を表示
ラベル CentOS の投稿を表示しています。 すべての投稿を表示

2014年1月18日土曜日

eclipse CDTでBoost.Logを使おうとしたらエラーが出る

・2014/01/25追記
ビルドエラー追加
eclipseバージョン修正

・バージョン
boost:1.55.0
eclipse:4.3.1

boost_1_54_0から標準で含まれているBoost.Logを使ってみます。

#include <boost/log/trivial.hpp>
int main()
    {
    BOOST_LOG_TRIVIAL(trace) << "Hello Boost.Log";
    return 0;
    }

eclipseだとマクロのトークン連結演算子がうまく処理できないようで、
下記、2つのビルドエラーが発生する場合、Code Analysisの設定を変更します。


Function 'BOOST_PP_SEQ_ENUM_BOOST_PP_SEQ_SIZE' could not be resolved

Invalid arguments '
Candidates are:
boost::log::v2s_mt_posix::record open_record()
boost::log::v2s_mt_posix::record open_record(const #10000 &)


Code Analyzerの設定はプロジェクトごとかワークスペース全体でできるので好きなほうを変更する。
プロジェクトはプロジェクトを右クリックして[Properties] → [C/C++ General] → [Code Analysis]
ワークスペースはメニューから[Window] → [Preferences] → [C/C++] → [Code Analysis]

[Syntax and Semantic Errors] 内の [Function Cannot be resolved] と [Invalid arguments]のチェックをオフもしくはSeverityをWarningかInfoに変更する。

boostを使っているとたまに出るエラー。
頭の片隅においておくと助かるときがあるはず。

次はリンクエラー。

undefined reference to `boost::log::v2s_mt_posix::attribute_name::get_id_from_string(char const*)'

これはBoost.Logを動的にリンクするようにオプションを設定していないため。
対処として全てのソースファイルにBOOST_LOG_DYN_LINK もしくは BOOST_ALL_DYN_LINKを定義します。
全ソースファイルに定義するのが面倒なときには boost/config/user.hpp に定義しましょう。
これはこのあたりに書いてあります。
http://www.boost.org/doc/libs/1_55_0/libs/log/doc/html/log/rationale/namespace_mangling.html

そしてcURLppを使うのをやめた

・バージョン
cURLpp:0.7.3

メンテナンスされていない感じがするのでcURLppの使用をやめました。

きっかけは curlpp::options::BoostWriteFunction がないとビルドエラーが発生したことから。
調べたらconfig.hを編集しないといけないことが判明。
でもconfig.hを編集しろなんてマニュアルには書いてない。
(見逃している可能性があるけど…)

マニュアルの最終更新が2006年1月。
ソースの最終更新は2009年12月。
4年近くマニュアルが更新されていないのは怖い。

あとは、curlpp::Cleanup クラスが非推奨となっているのに
全てのexample内で使用している。
これだとプログラムを作成するときにexampleを参考にできないのでツライ。

そんなわけでcURLppは封印します。

変わりにlibcurlを使おうと思います。
C言語のインターフェースしかないけどね。

2013年12月22日日曜日

CentOSにcurlppをインストールする

curlのC++ラッパーであるcurlppをインストールする。

curlをデフォルトの場所にインストールしていない場合には少し面倒。
--with-curlがないんだよね…。

・バージョン
CentOS:6.5
curlpp:0.7.3


■curlをデフォルトの場所にインストールしている場合

・http://code.google.com/p/curlpp/downloads/listからソースをダウンロードし解凍
・解凍したフォルダに移動
・./configure --prefix=<curlppのインストール先>
・make
・make install

curlをデフォルトの場所にインストールしていない場合

・http://code.google.com/p/curlpp/downloads/listからソースをダウンロードし解凍
・解凍したフォルダに移動
・export CPPFLAGS=-I<curlをインストールしたパス>/include
・./configure --prefix=<curlppのインストール先>
・examples/MakefileのAM_LDFLAGS を編集(※1)
  #AM_LDFLAGS = -L../src/curlpp/ -lcurlpp -static
  AM_LDFLAGS = -L../src/curlpp/ -lcurlpp -static -L<curlをインストールしたパス>/lib -lcurl
・make
・make install

※1
 編集しないとmakeでexamplesのビルドに失敗するがcurlpp自体のビルドは成功しているので、
 make installを行っても大丈夫なはず。

boostをインストールしている場合には--with-boostを指定するといいっぽい。

CentOSにcurlをインストールする


 ・バージョン
CentOS:6.5
curl:7.34.0

http://curl.haxx.se/download.htmlからソースをダウンロードし解凍
・解凍したフォルダに移動
・./configure --prefix=<インストール先>
・make
・make install