使用 BSP 库时 g++ 的未定义引用错误,但 gcc 的未定义引用错误

Slu*_*ger 2 c++ compiler-errors

我正在为我的一门课程制作一个并行程序。现在最初它是用 C 编写的,并且一切正常。然后我们将其全部更改为 C++,当我尝试编译该程序时,突然间出现了一些错误。我在并行部分使用包 mcbsp(多核 BSP)。这是程序

#include <stdio.h>
#include <stdlib.h>
#include <mcbsp.h>

void sieve(){
  return ;
}

main(int argc, int **arhv){
  bsp_begin(5);
  printf("%d\n",bsp_pid());
  bsp_end();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我用这个内容制作了一个文件 aaa.c 和 aaa.cpp 。然后当我在终端中输入时

gcc aaa.c -MMD -g -I../bsp/include -L../bsp/lib -lmcbsp1.2.0 -lpthread
Run Code Online (Sandbox Code Playgroud)

它编译得很好,程序按预期运行(打印内核的 id)。但是,当我输入

g++ aaa.cpp -MMD -g -I../bsp/include -L../bsp/lib -lmcbsp1.2.0 -lpthread
Run Code Online (Sandbox Code Playgroud)

它给出了以下反馈

/tmp/ccH3uox9.o: In function `main':
/home/teun/Documents/C/BSP/Sieve/sieve/aaa.cpp:10: undefined reference to `bsp_begin(unsigned int)'
/home/teun/Documents/C/BSP/Sieve/sieve/aaa.cpp:11: undefined reference to `bsp_pid()'
/home/teun/Documents/C/BSP/Sieve/sieve/aaa.cpp:12: undefined reference to `bsp_end()'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我已经坚持了大约一个小时,这真的很令人沮丧。我必须承认,我几乎没有使用 C++ 编程的经验,因为我主要使用 C。有谁知道出了什么问题?

编辑:我显示的程序只是一个使用 BSP 功能的小型工作示例。

Ulr*_*rdt 5

简单声明int bsp_end();在 C 和 C++ 中的解释不同。原因是在 C++ 中,您可以重载函数,这要求它们的参数包含在链接器的符号名称中,请参阅 C++ 名称修改以获取更多信息。现在,由于函数是用 C 编译器编译的,但声明是给 C++ 编译器的,因此符号不匹配,并且会出现链接器错误。

作为解决方案,添加extern "C"到函数声明中或可能将整个包含:

extern "C" {
#include <mcbsp.h>
}
Run Code Online (Sandbox Code Playgroud)