我想通过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发布于 2016-05-20 07:40:08
如果您丢失了每个SimGrid符号,那是因为您需要在CMakeLists.txt的末尾添加以下内容
target_link_libraries(FirstAgent simgrid)
如果您只丢失了sg_version_check,很可能您使用的是错误版本的库。
如果您正在使用Linux,请尝试键入ldd yourprogram并找到在运行时使用的simgrid库的路径。如果它是一个旧的,如我所怀疑的,只需删除它,并重新启动你的程序。系统应该在您的磁盘上搜索simgrid的另一个实例,可能是正确的实例。
如果您没有使用Linux,那么在整个磁盘中搜索被遗忘的simgrid库并删除它们。
https://stackoverflow.com/questions/37336111
复制相似问题