gpt4 book ai didi

c++ - OpenMPI 编译错误

转载 作者:行者123 更新时间:2023-11-30 04:11:53 28 4
gpt4 key购买 nike

我有一些使用 OpenMPI 的 *.cpp 文件。我还有 *.h 文件,其中包含指定给我的函数(其中一些)和它们的实现:

void Show(std::string s);
void ShowLine(std::string s);
void MPI_Output();

所以我在我的 *.cpp 文件中使用了这些函数,例如:

/*...*/
MPI_Output();

包括这个标题:

#include "my_h.h"

然后我尝试用 mpicc 编译我的程序:

mpicc -w my_best_program.cpp

在编译过程中失败并显示以下消息:

/tmp/icpcBCoxCA.o: In function `main':
MPIDebug9.cpp:(.text+0xa46): undefined reference to `ShowLine(std::string)'
MPIDebug9.cpp:(.text+0xa90): undefined reference to `MPI_Output()'
MPIDebug9.cpp:(.text+0xc0f): undefined reference to `Show(std::string)'
/tmp/icpcBCoxCA.o: In function `info_main(double)':
MPIDebug9.cpp:(.text+0xe49): undefined reference to `Show(std::string)'
/tmp/icpcBCoxCA.o: In function `info(double)':
MPIDebug9.cpp:(.text+0x104e): undefined reference to `ShowLine(std::string)'

另外,一些信息:

mpicc --showme:compile
-I/usr/mpi/intel/openmpi-1.4.4/include -pthread

我的问题有解决方案吗?

最佳答案

编译时没有问题,但链接时有问题。

mpicc -w my_best_program.cpp my_cpp_file_with_showline.cpp是你需要的东西。

解释:(简化)

在 .h 文件中,只有信息“嘿,编译器,存在一些名为 Show 的方法,返回 void,并且需要 std::string 类型的参数。当您编译调用的 cpp 文件时这个函数,确保它传递给它正确的参数,但它将在另一个 .cpp 文件中提供。(但我没有告诉你在哪个文件中。只需查看所有这些并找到合适的一个)“

它对所有单独的 .cpp 文件执行相同的操作(创建 .o 文件 - 你的 my_best_program.cpp 包含类似:“有 info_main(double) 函数,它有一些代码,它需要调用 Show(std::string) - 称为 Unresolved 引用”。

my_cpp_file_with_showline.cpp 将使用“有 Show(std::string) 方法,执行其他操作”创建 .o。

并且,在链接过程中(此时您不可见),所有“ Unresolved 引用”都已解决 - 即 info_main(double)会调用Show(std::string)来自不同的 cpp 文件。

当您使用多个 cpps 从命令行调用某些 C++ 编译器时,它通常会分别编译它们(每个都不知道另一个,只是 .h 文件中的函数声明)然后链接(合并所有函数调用和给定函数一起)到可执行文件中。

关于c++ - OpenMPI 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056431/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com