模拟网格。对来自 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 库并将其删除。
我想通过 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 库并将其删除。