4

さまざまなプロジェクトにリンクされているライブラリにコンパイルされたファイルの山がありますが、ほとんどのプロジェクトは比較的小さな部分しか必要としません。だから私はそれをレイヤーに分割する必要があります。

それを適切に行うには、下位層が上位層の何にも依存していないことを確認したいと思います。-Wl,--no-undefinedLinux では、ライブラリを共有してリンクに渡すだけです。しかし、動的ライブラリが明示的なエクスポートを必要とし、ソースがそのために準備されていないWindowsでそれを行う必要があります。

各レイヤーの単体テストを準備し、そのリンク中に未定義のシンボルをポップアップさせることもできます。ただし、クラスの小さなサブセットの単体テストしかありません。それらを追加しても、何かが追加されているがテストされていない場合はまだキャッチされません。

静的ライブラリが、指定された他のライブラリのセット以外のシンボルを必要としないことを確認する他の方法はありますか? Visual C++ 9.0 (2008) または MinGW のいずれかを使用できます。

4

1 に答える 1

1

うーん、Visual Studio に固有の強制リンクについて思いついたことを共有できます。すべてのシンボルがリンクされていることを確認するために正確にスキャンするわけではありませんが、これは、登録グローバルを強制的にリンクするときに機能します (実際にはコード内のどこにも参照されていません)。ヘッダーに配置するには:

#define DECLARE_OBJ( TYPE, INSTANCE_NAME ) \
  extern "C" TYPE INSTANCE_NAME; \
  __pragma( comment ( linker, "/INCLUDE:_" __STRINGIZE( INSTANCE_NAME ) ) )

これにより、2 つのコンパイル時文字列間のスペースに関する警告が発行されます。iirc 警告は完全に役に立たなかったのでプラグマ化しました。お役に立てれば。

于 2013-05-10T17:46:03.183 に答える