テンプレートのみのC++ライブラリを作成しています。ただし、「空の」共有ライブラリも提供したいので、SONAMEを制御することで、テンプレートが変更されてインスタンス化されたテンプレートABIの非互換性が発生するたびに、テンプレートコンシューマーの再構築を強制できます。
悲しいことに、特定のユーザーが-Wl,--as-needed
彼の中にいる場合、コンパイルされた実行可能ファイルがそこからシンボルを要求していないためLDFLAGS
、リンカーは私の共有ライブラリを削除しようとしています。NEEDED
プログラムが常にライブラリに対してリンクされるようにするにはどうすればよいですか。できれば、不要なダミー関数呼び出しを導入しないようにします(または、必要な場合は、それらの負担を最小限に抑えます)。
編集:注として、特定のテンプレートクラスは静的メソッドを提供し、通常はそれらの静的メソッドのみが使用されます。したがって、コンストラクターに入れられたものに依存することはお勧めできません。私は、すべてのメソッドに何らかの強制を課すことを避けたいと考えています。
@EmployedRussianに触発されて、私は達成しました:
extern int dummy;
namespace
{
struct G
{
inline G()
{
dummy = 0;
}
};
static const G g;
}
しかし悲しいことに、それはヘッダーファイルを含むすべてのユニットに対して1回割り当てを実行します。