0

コンパイル/リンクに CMake を使用するかなり大きなライブラリを使用しています。いくつかの機能を追加する必要があるため、いくつかのクラスをライブラリに追加する必要があります。問題は、単純な helloWorld クラスをライブラリに追加して、メイン関数から呼び出そうとすると、リンク時に未定義の参照の問題が発生することです。ビルドされたコード (ライブラリ フォルダー内の "CMakeFiles") を調べたところ、私のクラスは CMake によってコンパイルされていません (したがって、たとえば、そこに HelloWorld.o ファイルはありません)。

誰かが私が間違っているところを指摘できますか? このクラスをコンパイルするように CMake に明示的に指示する必要がありますか? (はいの場合、どのように?)。私はCMakeの初心者なので、この問題に取り組む方法がわかりません。

このように関数を呼び出します。``

GSROrdinary sord;

エラーメッセージは、次のようなものです。

undefined reference to beep::GSROrdinary::GSROrdinary()
undefined reference to beep::GSROrdinary::~GSROrdinary()
4

2 に答える 2

2

はい、クラスをコンパイルするように CMake に指示する必要があります。オンラインで見つけられるいくつかの CMake チュートリアルをチェックすることをお勧めします。http://www.cs.swarthmore.edu/~adanner/tips/cmake.php - CMakeLists.txtファイルと構文に特に注意してください。新しいクラスを追加するには、lib の CMakeLists.txt を変更する必要があります。

于 2011-07-25T19:29:42.003 に答える
1

新しいファイルを CMake ファイルに明示的に追加して、コンパイルおよびリンクできるようにする必要があります。

このコメント付きのサンプルは、開始点となる可能性があります (基本的には、CMakeLists.txt ファイルの 1 つでディレクティブを探し、add_library (LIBNAME files)そこに新しいファイルを追加する必要がありますが、場合によってはドキュメントも読む必要があります。

于 2011-07-25T19:28:24.233 に答える