lib ファイルの使用に移行し、CEREAL_REGISTER_DYNAMIC_INIT を適切に使用したいと考えました。これを使用する必要があるかどうかはわかりませんが、シリアル化タイプの 1 つが別の DLL で適切に取得されていないことに気付き、これが役立つかもしれないと考えました。
accountActions.h には、ファイルの最後に次のものがあります。
CEREAL_FORCE_DYNAMIC_INIT(mv_clientactions);
accountActions.cpp には、ファイルの上部近くに次のものがあります。
#include "clientActions.h"
#include "cereal/cereal.hpp"
#include "cereal/types/base_class.hpp"
#include "cereal/types/polymorphic.hpp"
#include "cereal/archives/adapters.hpp"
#include "cereal/archives/portable_binary.hpp"
#include "cereal/archives/json.hpp"
CEREAL_REGISTER_TYPE(CreatePlayer);
CEREAL_REGISTER_TYPE(LoginRequest);
CEREAL_REGISTER_TYPE(FindMatchRequest);
CEREAL_REGISTER_TYPE(ExpectedPlayersNoted);
CEREAL_REGISTER_DYNAMIC_INIT(mv_accountactions);
mv_accountactions が完全に構成された文字列であると仮定します。その名前のライブラリまたは dll はありませんが、これら 2 つのユニットをリンクするために使用されると考えましたか? ドキュメントはまばらで、これを間違って使用している可能性があります。
私が得ているエラーはこれです:
1> c:\git\bindstone\source\game\networklayer\accountactions.cpp(13): エラー C2084: 関数 'void cereal::detail::dynamic_init_dummy_mv_accountactions(void)' には既に本体があります 1> c:\git\ bindstone\source\game\networklayer\accountactions.h(127): 注: 「dynamic_init_dummy_mv_accountactions」の以前の定義を参照してください
再確認しましたが、他の場所では mv_accountactions を使用していません...これの原因や解決方法がわかりません。CEREAL_REGISTER_DYNAMIC_INIT が必要なのか、それとも DLL に移行して誤用した場合に備えて安全に使用する方法があるのか 疑問に思っています。
アドバイスをいただければ幸いです。
ここで開かれた問題: https://github.com/USCiLab/cereal/issues/523