C++静的ライブラリはひどく悪い再配布可能です。
これはボットの接線ですが、ここではIMOについて言及する必要があります。呼び出し元と一致する必要がある多くのコンパイラオプションがあります。
- Ansi / Unicode、
- 静的/動的CRTリンク、
- 例外処理の有効化/無効化、
- メンバー関数ポインターの表現
- LTCG
- デバッグ/リリース
これは最大64の構成です。
また、C ++コードがプラットフォームに依存しない場合でも、プラットフォーム間で移植性はありません。同じプラットフォーム上の将来のコンパイラバージョンでも機能しない可能性があります。LTCGは巨大な.libファイルを作成します。したがって、いくつかの選択肢を省略できる場合でも、ビルドと配布のサイズが非常に大きく、ユーザー向けの一般的なPITAがあります。
これが、静的ライブラリのみに付属するものを購入することを検討しない主な理由です。ましてや、あらゆる種類のコピー防止機能を追加するものはありません。
実装のアイデア
Shmooptyの提案よりも優れた基本的なメカニズムは考えられません。
さらに、ビルドに「透かし」を入れることができるので、「野生の」ライブラリを検出した場合、そのライブラリを誰に販売したかを判断できます。(しかし、あなたは何をするつもりですか?潜在的に無実の顧客に怒った電子メールを書きますか?)また、これにはいくらかの努力が必要です。実行に影響を与えない簡単に見つけられるバイトのシーケンスを使用してもあまり役に立ちません。
LIBの「アンパッカー」ツールから身を守る必要があります。ただし、リンカは未使用の関数を削除できるはずです。
一般的な考え
適切な保護メカニズムの実装には細心の注意と創造性が必要ですが、追加のサポートコストを発生させず、厳しい社会的決定を必要とするメカニズムはまだ1つもありません。コピー防止に費やされる時間は、製品の改善に費やされない時間です。C ++コードの市場はそれほど大きくはありません。顧客が支払う必要のある作業は、たくさんあると思います。
私がコードを購入するとき、私はドキュメント、サポート、ソースコード、およびその他の「将来の証拠」の兆候に対して喜んで支払います。ライセンスについてはそれほど多くありません。