問題タブ [spdlog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - spdlog を使用したライブラリからのロギング
Windows のライブラリを含むプロジェクトでspdlogを使用しようとしています。2 つのロガーを作成します。ライブラリを使用するアプリ用に 1 つ、ライブラリ自体用に 1 つ。ライブラリのロガーはアプリから作成されますが、ライブラリがメッセージを追加しようとするとクラッシュします。
以下は簡単な例です。
図書館
libclass.h
libclass.cpp
アプリケーション
main.cpp
c++ - cmake インクルード ヘッダーのみのライブラリ
プロジェクトの 1 つにspdlogを含めたいと考えています。ヘッダーのみのライブラリです。私が構築しているプロジェクトはcmakeを使用しています。現在私は使用しています
cmakeで、ライブラリを次のように含めます
ロガーフォルダー内のlogs.hにあります。そのようなファイルやディレクトリがないという致命的なエラーが発生しています。アプリケーションに同じライブラリを含める正しい方法は何ですか?
pid - spdlog を使用して pid (プロセス ID) をログに記録する方法
spdlog
次のようにしてログに記録できますthreadid
。
spdlog::set_pattern("*** [%H:%M:%S %z] [thread %t] %v ***");
しかし、どうすればログに記録できますpid(process id)
か?
c++ - 別のライブラリのテンプレートに一致する 1 つのライブラリの関数
私は 2 つの異なるライブラリを使用する C++ プロジェクトに取り組んでいます。ロギング用のspdlogと、オブジェクトをバイトにシリアル化するためのmutils-serialization (ネットワーク経由で送信するため)。どちらのライブラリも名前空間を適切に使用していますが、両方を同時に使用するプログラムを作成しようとすると、コンパイラ (g++ 6.2) が無意味なエラーを表示し、spdlog ライブラリから関数テンプレートをインスタンス化しようとしていることを示しているようです。 mutils ライブラリの関数テンプレートの定義を使用します。
これが私の簡単なテストプログラムです:
TestSerializableObject
mutils::ByteRepresentable
(シリアライゼーションを有効にして mutils-serialization ライブラリをプルするインターフェイス)を実装し、 operator<<
(spdlog がログに記録できるようにするために必要な) を提供する単純なクラスです。必要に応じてコードを投稿できます。
これを でコンパイルするとg++ -std=c++14 -I"./src" -I"./libraries" -I"./libraries/mutils/" -L"./libraries/" -O0 -g3 -Wall "src/LibraryCollisionTest.cpp"
、長くて醜いエラーが表示されます (心配しないでください。解析のお手伝いをします)。
キーラインは次のとおりです。
どういうわけか、g++ は、名前空間内の spdlog ライブラリ内のテンプレート化された関数の展開から、名前空間内の mutils ライブラリ内のfmt::internal
関数テンプレートにジャンプしましたmutils
。これは、明らかに spdlog ライブラリが意図したものではありません! の1276 行を見るとformat.h
、このテンプレート構造体の中で "convert" 関数を呼び出す行です。
上記の数行は、確かに、関数「変換」です。
これらはすべて namespace 内fmt::internal
にあり、私の IDE は、1276 行目の関数「convert」の定義が必要な場合は、1248 行目の関数「convert」にジャンプする必要があることに同意します。では、なぜ g++ はこの定義を無視し、代わりにmutils::convert()
正しい名前空間にさえないの定義を使用してみてください。
clang もこのプログラムのコンパイルに失敗し、同じ間違いを犯すことに注意してください。したがって、これは g++ のバグではないと思います。
c++ - C++ SPDLOG コンパイル エラー: 変数またはフィールド 'set_error_handler' が void と宣言されました
プロジェクトで spdlog を使用しようとしています。spdlog docuによると 、 include フォルダーの下にファイルをコピーして、C++ 11 コンパイラーを使用するだけです。
/include/spdlog フォルダーをプロジェクトのルート フォルダーにコピーしましたが、プロジェクトをビルドしようとすると多くのエラーが発生します。いくつかはffです:
CMakeLists.txt に以下を追加しようとしました
(libspdlog-devをインストールしました)
しかし、上記のいずれも機能しません。これを修正する方法を知っている人はいますか?どうもありがとう!