質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • C++

    4444questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio 2013

    319questions

    Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

log4C++の使用方法について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,848

KTMEI

score 36

当方、今までC#の経験のみで、C++初心者(2日目)です。
ほぼ触ったことがないので、細かい部分も教えていただきたいです。

C++を使用して試しにログを出力するプログラムを作成しています。
以下のサイトを参考にlog4C++で作成しておりますが、コンパイル
エラーが消えずに困っています。

http://qiita.com/hsagae/items/d7b0cf6ee876b636b3b9

上記サイトの「準備」にてlog4cpp.libとlogcpp.dllは作成しました。

複数ありますが、現在発生しているコンパイルエラーは、
Log.hのincludeの箇所で以下のエラーが出ています。

IntelliSense: ソース ファイルを開けません "log4cpp/PropertyConfigurator.hh" 

==質問①==
ライブラリの追加方法が間違えているのかもしれないので確認です。

プロジェクトのプロパティページの[リンカー]-[入力]にて、
追加の依存ファイルにlog4cpp.libを追加しています。

生成したlog4cpp.libを追加ライブラリとして指定する際、
元から入力されていたライブラリの後に以下のように追加
しています。この指定方法は正しいのでしょうか。

kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;log4cpp.lib;%(AdditionalDependencies)

また、log4cpp.libは生成はしましたが、どこかに格納
しなくてはいけないのでしょうか。ライブラリの名前を
入力しているだけで、パス設定をしていないので、
きちんとlog4cpp.libのファイルを見ることが出来て
いるのかが不明です・・。

==質問②==
ログ出力フォーマットファイル(log4cpp.properties)を
用意とありますが、作り方がわからなかったため、
ソースファイルを右クリックし、追加でtxt形式を選択し、
log4cpp.propertiesファイルを作成→上記Webに記載の
フォーマット内容をそのままコピペしましたが、
手順としてはこれで問題ないでしょうか。

==質問③==
Base.cppやDerived.cppを作成するさい、クラスとして
作成しています。この時ヘッダーファイル(.h)も自動で
作成されていますが、これは問題ないでしょうか。

幾つかサイトを回っていたのですが、実施内容が間違えて
いるのかどうかも判断がつかずどこから手をつけていいか
わからなくなったため、ここで質問をさせていただきました。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

IntelliSense: ソース ファイルを開けません "log4cpp/PropertyConfigurator.hh"

これですが、単にIntelliSenseがしくっている可能性もありますが、通常はインクルードパスが通っていないエラーと思われます。VS2013のインクルードパス設定でこのファイルにアクセスできるかどうか確かめたほうが良いでしょう。

生成したlog4cpp.libを追加ライブラリとして指定する際、
元から入力されていたライブラリの後に以下のように追加
しています。この指定方法は正しいのでしょうか。

指定の仕方はあってますが、ライブラリパスの設定でパスが通ってなければリンク時にエラーになります。
ライブラリはライブラリパスさえ通っていればどこに入れておいてもOKです。

Base.cppやDerived.cppを作成するさい、クラスとして
作成しています。この時ヘッダーファイル(.h)も自動で
作成されていますが、これは問題ないでしょうか。

クラスWizardを使って作成するとそうなりますね。C#は.csファイルだけですが、C++の場合はヘッダーとソースファイルに分かれます。(ヘッダーだけで書いてしまう手もありますがインライン展開になるのと、長くなると見づらくなるので、通常は.hにクラス定義を.cppに実装を記述します)
なお、私は普段はWizardは使わずに、自分でヘッダーファイルやソースファイルを作成してコツコツと組み込むことが多いです。

C#をやっていたということで、log4NETは使っていたんでしょうか?それならコンパイルとリンクさえ出来たら後は使い方は基本的に同じなはずなのでそれほどではないかもしれませんが、log4C++は、C++を触ったことのない人にとっては結構敷居が高いかもしれません。
簡単なもので良ければ、C++ でロガーっぽい何かの様なものを利用する手があります。(他にも探せばあるかと)

私も上記のようなネットに転がってる簡単なものを最初使ってましたが、色々とやりたいことが出てきたために、今は、boostライブラリのBoost.Logを使っています。
log4XXも検討したのですが、DLLを添付しないといけないとかがあったので、完全に組み込んでしまえるboostライブラリを今は使用しています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/05 15:11

    回答ありがとうございます。

    >>IntelliSense: ソース ファイルを開けません "log4cpp/PropertyConfigurator.hh"
    >
    >これですが、単にIntelliSenseがしくっている可能性もありますが、通常はインクルードパスが通っていないエラーと思われます。VS2013のインクルードパス設定でこのファイルにアクセスできるかどうか確かめたほうが良いでしょう。
    >

    以下の箇所へlog4cpp.dllとlog4cpp.libのあるディレクトリを絶対パスで
    指定するように記載してみましたが、同じようにエラーが出ています。

    ■プロジェクトのプロパティ画面の[構成プロパティ] - [C/C++] - [全般]
     ・追加のインクルードディレクトリ
    ■プロジェクトのプロパティ画面の[構成プロパティ] - [リンカー] - [全般]
     ・追加のライブラリディレクトリ

    上記で確認箇所はあっていますでしょうか。

    もし確認の仕方が違う場合、お手数ですが、どのような箇所を確認すれば
    いいか教えていただけないでしょうか・・・。

    また、以下にvisual c++は初期設定で、他のdllを読まないようになっているという
    記載を見つけたのですが、この設定を読めるようにする設定は分かりますでしょうか・・。

    https://teratail.com/questions/11711

    代替案についてのご教授、ありがとうございました。

    キャンセル

  • 2017/01/05 17:06

    IntelliSenseの方は、"log4cpp/PropertyConfigurator.hh"のヘッダーファイルが開けませんというエラーなので、このファイルのインクルードパスが通っていない可能性が高いです。なので、そのパスをC/C++の全般の追加のインクルードディレクトリで追加する必要があります。
    注意点は、"log4cpp/PropertyConfigurator.hh"と"log4cpp"が頭についているので、log4cppフォルダーの親フォルダを指定しないといけないということです。
    例えば、絶対パスが"C:\hoge\log4cpp\PropertyConfigurator.hh"なら、追加のインクルードディレクトリとしては「C:\hoge」になるということです。

    log4cpp.libのパスの指定はリンカーのその場所でOKです。

    DLLはそのDLLを作成した時に作成したLIBファイルが有るのなら読み出す必要はないです。(なお、ソースがなくてDLLしかない場合でも、DLLとDEFファイルの2つが有れば、ライブラリアンを使ってLIBファイルを作成することは可能です。DEFファイルというのはエクスポートする関数名が書かれたテキストファイルです。)

    DLLが必要になるのは、log4cppを使うアプリケーションの実行時なので、そのアプリケーションからアクセスできるフォルダーに置いておく必要があります。(通常はEXEファイルと同じフォルダーに入れておけばアクセスできます。)

    キャンセル

  • 2017/01/06 12:28

    上記のコメントを参考に、実施してみたところ無事にInteliSenseのエラーは
    解消できました。ありがとうございました。

    他にもC++のコンパイルエラーが出ていましたが、C++の構文を勉強しながら
    修正しコンパイルエラーも消すことが出来ました。

    log4cppの設定ファイルを開く箇所でC++の例外が出ているのですが、
    本質問とは違うので、新規の質問として再度質問しています。

    https://teratail.com/questions/61039?modal=q-comp

    もし、何かお心当たりなどがありましたらコメントいただければ幸いです。

    とてもわかり易く丁寧な回答、ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • C++

    4444questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio 2013

    319questions

    Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです