当我构建源代码时,它会抛出一个错误: declaration of 'globalMemTrace' has a different language linkage
#ifdef MEMDEBUG_SIMULATIONS
#include "mem-trace.h"
MemTrace *globalMemTrace;
#endif
// omitted unrelated parts
int Tcl_AppInit(Tcl_Interp *interp)
{
#ifdef MEMDEBUG_SIMULATIONS
extern MemTrace *globalMemTrace;
globalMemTrace = new MemTrace;
#endif
}
Run Code Online (Sandbox Code Playgroud)
我已经用Google搜索过几次了.有人说,这是由于一个错误,如果clang和一些说使用extern不同的技巧可以解决它.
但由于我不是这样的专业,我已经尝试了其中的一些而未能解决它.有什么好方法可以解决它吗?
它是用C++编写的,问题发生在 extern MemTrace *globalMemTrace;
C++ 提供了 C++ 和非 C++ 语言之间的语言链接的链接。
例如
// in C++ program
extern "C" int displayfoo(const char *);
int main() {
return displayfoo("hello");
}
/* in C program */
#include <stdio.h>
extern int displayfoo(const char * str) {
while (*str) {
putchar(*str);
putchar(' ');
++str;
}
putchar('\n');
}
Run Code Online (Sandbox Code Playgroud)
您正在使用 C displayfoo++ 代码中的 C 函数,因此您需要告诉编译器/链接器它来自不同的语言。这是由 extern "C" 完成的。
在您的代码中MemTrace *globalMemTrace;可能之前在 C 代码或 C++ 中的 C 块中声明,因此您需要像这样声明
extern "C" MemTrace *globalMemTrace;
Run Code Online (Sandbox Code Playgroud)
看来这个名称已经被声明为具有 C 语言链接。
extern "C" MemTrace *globalMemTrace;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6966 次 |
| 最近记录: |