C++ “外部”;";linux平台中的行为

C++ “外部”;";linux平台中的行为,c++,linux,header-files,extern,C++,Linux,Header Files,Extern,在windows平台中,这不会给出任何错误(以下代码) 然而,它在Linux平台上给出了“符号查找错误”。Linux平台中的extern'C'有什么不同的行为吗? KEL .H./C>不能同时声明C和C++函数。 ScriptInterface.h extern "C" { #include "kel.h" #include "process.h" #if defined(SIMULATOR_COMPILE_FROM_SCRIPTINTERFACE) || defined(SIMULATOR_

在windows平台中,这不会给出任何错误(以下代码)


然而,它在Linux平台上给出了“符号查找错误”。Linux平台中的extern'C'有什么不同的行为吗?

是一个非常混乱的名称,几乎可以肯定,因为您在
extern“C”块之外包含了
kel.h


去掉
xyz.cpp
中的前三个include,只使用
ScriptInterface.h
中包含的那些include(标记为非损坏)。

出于兴趣,你怎么会认为OP使用的是C编译器?@NPE:问题有一个C标记:-),但文件名有一个
.cpp
扩展名,这是C++的,是的,但是这是在谈论Windows平台。而且,事实上,如果使用g++而不是gcc,extern“C”在Linux中工作得很好。我可能错了。你应该提供更多的信息。你是如何编译的?确切的错误信息是什么?等等。我正在运行一个脚本文件,负责编译xyz.cpp文件。错误消息:符号查找错误:xyz.so:未定义的符号:Z16KEL\umem\uallocatep19kel\umem\utpoolhandleji如果您使用它,它会告诉您缺少的代码是
KEL\umem\uallocate(KEL\umem\utpoolhandle*,unsigned int)
。。。很明显,您有一个
kel.h
,并且相当公平地猜测该函数的声明就在那里的某个地方。请注意,
xyz.cpp
在包含
ScriptInterface.h
之前包含
kel.h
,并且没有使用
extern“C”
包装
kel.h
的包含-这很可能是您的错误。@user3267021:巧合,运气,你说得对。在C函数的声明中,你应该使用 Extn(c),并且清楚地指出,代码> KEL .H./C>不能同时声明C和C++函数。
ScriptInterface.h

extern "C"
{
#include "kel.h"
#include "process.h"
#if defined(SIMULATOR_COMPILE_FROM_SCRIPTINTERFACE) || defined(SIMULATOR_WIN)
#include "sigtypes.h"
#endif
}
xyz.cpp

#include "kel.h"
#include "process.h"
#include "sigtypes.h"

#include "ScriptInterface.h"