我想通过CLion代码编辑器使用simgrid来实现master-worker应用程序。 我有这样的CMakeLists.txt:
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
答案 0 :(得分:2)
如果您缺少每个SimGrid符号,那是因为您需要在CMakeLists.txt的末尾添加以下内容
target_link_libraries(FirstAgent simgrid)
如果您只缺少sg_version_check
,则可能是您使用的是错误版本的库。
如果您使用的是Linux,请尝试键入ldd yourprogram
并查找运行时使用的simgrid库的路径。如果它是我怀疑的旧版本,只需将其删除并重新启动您的程序即可。系统应该在磁盘上搜索另一个simgrid实例,可能是正确的。
如果您不使用Linux,请在整个磁盘中搜索被遗忘的simgrid库并将其删除。