1)ソリューションには 2 つのプロジェクトが含まれます。プロジェクト 2 はプロジェクト 1 に依存します (「プロジェクトの依存関係」チェック ボックス グループでチェックされます)。プロジェクト 1 の一部のクラスは宣言および実装されていますが、コードでは使用されていません (インスタンスが作成されます)。これらのクラスを lua で使用するには、luabind を使用してバインドします。バインディング関数は、バインドする必要がある各クラスの静的メソッドとして宣言されます。cpp のコードを使用して自動的に呼び出され、「const bool is_bound = ClassName::Bind()」のようなものを使用します。ビルド結果は、プロジェクト 1 の静的ライブラリとプロジェクト 2 の実行可能ファイルです。
すべてのクラスがバインドされており、スクリプトで使用できます。
2)プロジェクト 2 に依存するプロジェクト 3 を追加しました。プロジェクト 2 のビルド結果は静的ライブラリであり、プロジェクト 3 のビルド結果は実行可能です。その結果、プロジェクト 1 で定義されたすべてまたは一部のクラスが、バイナリにまったくリンクされていません。問題 - プログラムを起動した後、それらはバインドされず、スクリプトで使用できません。
この問題はどのように解決できますか? また、その原因は何ですか? 前もって感謝します。
PS 「使用の模倣」による強制リンクを使用して手動で解決しようとしました(実験として)。私はこのような関数を使用しました(私は知っています、それは完全に醜いです)
template <class T, class A1, class A2>
void ForceLinking()
{
boost::function<void(A1, A2)> f =
boost::bind<T>(boost::lambda::constructor<T>(), _1, _2);
}
ForceLinking<ClassName, const string&, bool>();
その結果、パーツがリンクされ始め、他のパーツはリンクされなくなりました。