3

リンカーがソース ファイルで参照されているシンボルを見つけられない場合、CMake でエラー、または少なくとも警告を生成するにはどうすればよいのでしょうか。

たとえば、foo.c があるとします。

#include "bar.h" //bar.h provides bar()

void foo(void)
{
  bar()
  return;
}

スタティック ライブラリを構築している場合、add_library() ディレクティブの使用方法がよくわからない場合、デフォルトの動作では、bar が foo のオブジェクト アーカイブ ファイルで参照されていないシンボルであるという警告さえ出さないようです。 (.a)

4

2 に答える 2

0

最近は GCC リンカー用のがあります-z nowが、これは CMake の問題ではありません。

私が見つけた最も簡単な方法は共有ライブラリでのみ機能しますが、基本的には共有ライブラリごとにテストを作成し、それを実行してdlopen(path, RTLD_NOW)(Windows の場合も同様)、その戻り値をテストの戻り値として使用します。価値。すべての共有オブジェクトのリストを取得するために、add_libraryすべての共有ライブラリをグローバル プロパティに追加するラッパー関数があります。この関数は、テストを動的に生成するために使用されます。ターゲットが共有されているか静的であるかを判断する方法がいくつかあったことを覚えていますが、現在ドキュメントを見つけていません。

于 2013-09-19T00:42:07.693 に答える