2011-07-25 12 views
0

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

誰かが間違っている場所を指摘できますか?このクラスをコンパイルするためにCMakeに明示的に伝える必要がありますか? (もしそうなら、どのように?)。私はCMakeの初心者ですので、この問題にどのように対処するのか分かりません。

私はこのような関数を呼び出します。 ``

GSROrdinary sord; 

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

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

答えて

1

コンパイルしてリンクするために、新しいファイルを明示的にCMakeファイルに追加する必要があります。

このcommented sampleは基本的に、あなたのCMakeLists.txtファイルのいずれかにadd_library (LIBNAME files)ディレクティブを探し、そこに新しいファイルを追加する必要がありますが、あなたはまた、おそらくdocumentationを読んでください(あなたのスタートを与えることができる。

+0

ありがとう、それは助けてくれました – Ikram

2

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

+0

チップのおかげで... :) – Ikram

関連する問題