模拟网格。对来自 msg.h 的导入函数的未定义引用

SimGrid. Undefined references to imported functions from msg.h

我想通过 CLion 代码编辑器使用 simgrid 实现主从应用程序。 我有这样的 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

如果您遗漏了所有 SimGrid 符号,那是因为您需要在 CMakeLists.txt

的末尾添加以下内容

target_link_libraries(FirstAgent simgrid)

如果您只缺少sg_version_check,很可能是您使用了错误版本的库。

如果您使用的是 Linux,请尝试键入 ldd yourprogram 并找到在运行时使用的 simgrid 库的路径。如果我怀疑它是旧的,只需将其删除并重新启动您的程序。系统应该在您的磁盘上搜索另一个 simgrid 实例,可能是正确的。

如果您不使用 Linux,请在整个磁盘中搜索被遗忘的 simgrid 库并将其删除。