2016-05-20 6 views
1

私はCLIONコードエディタでsimgridを使用してマスターワーカーアプリケーションを実装したいと思います。 は、私はそのようなCMakeLists.txtを持っている:SimGrid。 msg.hからインポートされた関数への未定義の参照

project(FirstAgent) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.c) 
add_executable(FirstAgent ${SOURCE_FILES}) 

のmain.cの構造は以下の通りです。 MSG_init()MSG_mainなどはsimgrid/msg.hの関数です。 (私は機能を左クリック+ CTRL場合simgrid/msg.gが開かれるの対応する機能):

#include <stdio.h> 
#include <simgrid/msg.h> 

int main(int argc, char *argv[]){ 
    MSG_init(&argc, argv); 
    MSG_function_register("master", master); 
    MSG_create_environment("platform.xml"); 
    MSG_launch_application("deployment.xml"); 
    MSG_main(); 
    return 0; 
} 
int worker(int argc, char *argv[]){...} 
int master(int argc, char *argv[]){...} 

しかし、私はsimrid/msg.hからインポート機能が認識することはできません。それはエラーを与えます:

/home/ken/CLionProjects/FirstAgent/main.c:10: undefined reference to `sg_version_check' 
/home/ken/CLionProjects/FirstAgent/main.c:10: undefined reference to `MSG_init_nocheck' 
/home/ken/CLionProjects/FirstAgent/main.c:12: undefined reference to `MSG_function_register' 
/home/ken/CLionProjects/FirstAgent/main.c:13: undefined reference to `MSG_function_register' 
/home/ken/CLionProjects/FirstAgent/main.c:15: undefined reference to `MSG_create_environment' 
/home/ken/CLionProjects/FirstAgent/main.c:16: undefined reference to `MSG_launch_application' 
/home/ken/CLionProjects/FirstAgent/main.c:18: undefined reference to `MSG_main' 
... 

それを避けるためにプロジェクトを正しく設定しますか?

UPD

target_link_libraries(FirstAgent simgrid)を追加した後だけエラーが残っている:

/home/ken/CLionProjects/FirstAgent/main.c:10:あなたの場合

`sg_version_check' 
collect2: error: ld returned 1 exit status 
make[3]: *** [FirstAgent/FirstAgent] Error 1 
make[2]: *** [CMakeFiles/FirstAgent.dir/all] Error 2 
make[1]: *** [CMakeFiles/FirstAgent.dir/rule] Error 2 
make: *** [FirstAgent] Error 2 

答えて

2

への未定義参照すべてのSimGridシンボルが欠落しています。これは、CMakeLists.txtの末尾に以下を追加する必要があるためです。

target_link_libraries(FirstAgent simgrid)

sg_version_checkが見つからない場合は、間違ったバージョンのライブラリを使用している可能性があります。

Linuxを使用している場合は、ldd yourprogramと入力して、実行時に使用されるsimgridライブラリへのパスを見つけてください。私が疑っているようにそれが古いものであれば、それを消去してプログラムを再起動するだけです。システムは、あなたのディスク上のsimgridの別のインスタンス、おそらくは正しいものを探すべきです。

Linuxを使用していない場合は、ディスク全体から忘れたsimgridライブラリを探して削除してください。

+0

msg.hは明らかにライブラリファイルではなく、ヘッダファイルです。 –

関連する問題