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 功能的小型工作示例。
简单声明int bsp_end();在 C 和 C++ 中的解释不同。原因是在 C++ 中,您可以重载函数,这要求它们的参数包含在链接器的符号名称中,请参阅 C++ 名称修改以获取更多信息。现在,由于函数是用 C 编译器编译的,但声明是给 C++ 编译器的,因此符号不匹配,并且会出现链接器错误。
作为解决方案,添加extern "C"到函数声明中或可能将整个包含:
extern "C" {
#include <mcbsp.h>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |