错误LNK2019:未解析的外部符号
error LNK2019: unresolved external symbol
我是c++新手,我面临着在Matlab c x文件中包含c++代码的问题。
我有五个文件:RTIFederate.h
, RTIFederate.cpp
, RTIFedAmb.cpp
, RTIFedAmb.h
, RTI3.cpp
。RTI3.cpp
包含MEX模块。在使用MEX命令和库编译时,我得到以下错误:
Creating library C:UsersNudelAppDataLocalTempmex_DBx_svtemplib.x and object
C:UsersNudelAppDataLocalTempmex_DBx_svtemplib.exp
RTI3.obj : error LNK2019: unresolved external symbol "class rti1516e::ObjectInstanceHandle DistributedParametersLine" (?DistributedParametersLine@@3VObjectInstanceHandle@rti1516e@@A) referenced in function "void __cdecl mdlOutputs(struct SimStruct_tag *,int)" (?mdlOutputs@@YAXPAUSimStruct_tag@@H@Z)
RTI3.obj : error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * IEC_Model" (?IEC_Model@@3PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) referenced in function "void __cdecl mdlOutputs(struct SimStruct_tag *,int)" (?mdlOutputs@@YAXPAUSimStruct_tag@@H@Z)
RTI3.obj : error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * IEC_Attribute" (?IEC_Attribute@@3PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) referenced in function "void __cdecl mdlOutputs(struct SimStruct_tag *,int)" (?mdlOutputs@@YAXPAUSimStruct_tag@@H@Z)
RTI3.obj : error LNK2019: unresolved external symbol "class rti1516e::ObjectInstanceHandle PowerResource" (?PowerResource@@3VObjectInstanceHandle@rti1516e@@A) referenced in function "void __cdecl mdlOutputs(struct SimStruct_tag *,int)" (?mdlOutputs@@YAXPAUSimStruct_tag@@H@Z)
RTI3.obj : error LNK2019: unresolved external symbol "class rti1516e::AttributeHandle * _classattribute" (?_classattribute@@3PAVAttributeHandle@rti1516e@@A) referenced in function "void __cdecl mdlOutputs(struct SimStruct_tag *,int)" (?mdlOutputs@@YAXPAUSimStruct_tag@@H@Z)
RTI3.obj : error LNK2019: unresolved external symbol "public: __thiscall RTIFedAmb::RTIFedAmb(void)" (??0RTIFedAmb@@QAE@XZ) referenced in function "public: void __thiscall RTIFederate::run(void)" (?run@RTIFederate@@QAEXXZ)
RTI3.mexw32 : fatal error LNK1120: 6 unresolved externals
C:PROGRA~1MATLABR2011BBINMEX.PL: Error: Link of 'RTI3.mexw32' failed
我的RTI3.cpp
有以下代码:
#include "RTIFederate.cpp"
static void mdlOutputs(SimStruct *S, int_T tid)
{
RTIFederate *c = (RTIFederate*) ssGetPWork(S)[0];
// Lê a porta de entrada correspondente
time_T offset = ssGetOffsetTime(S,0);
time_T timeOfNextHit = ssGetT(S) + offset ;
ssSetTNext(S, timeOfNextHit);
for(int_T i=0;i<NUM_INPUTS;i++) {
int *dims = ssGetInputPortDimensions(S, i);
int frameSize = dims[0]; // Tamanho do campo (se for trifasico sera 3 , por ex
int numChannels = dims[1];
if((ssGetInputPortWidth(S,i)<1) ||(ssGetInputPortWidth(S,i)>1)|| (frameSize>1)) {
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S, i);
real_T *y = ssGetOutputPortRealSignal(S,i);
int_T width = ssGetOutputPortWidth(S,i);
mexPrintf("%s%d%s%s%dn","Num da entrada ->",i," ","Num largura > ",width);
for (int_T j=0;j<width;j++){
*y++ =*uPtrs[j];
mexPrintf("%s%u%sn","IEC_Model[",i,"]--",IEC_Attribute[i].c_str());
if(IEC_Model[i].compare("DistributedParametersLine")!=0) {
if(IEC_Attribute[i].compare("Voltage")) {
mexPrintf("%s%u%s%fn","Voltage[",j,"]-->",*uPtrs[j]);
c->AtualizaValoresdeAtributos(DistributedParametersLine,_classattribute[0],*uPtrs[j],timeOfNextHit);
} else if(IEC_Attribute[i].compare("Current")) {
mexPrintf("%s%u%s%fn","Current[",j,"]-->",*uPtrs[j]);
c->AtualizaValoresdeAtributos(DistributedParametersLine,_classattribute[0],*uPtrs[j],timeOfNextHit);
}
} // end if IEC_Model
mexPrintf("%s%fn","Avanco de tempo1->",timeOfNextHit);
} // end for
} else {
double *u1=(double *) ssGetInputPortSignal(S, i);
real_T *y1 = ssGetOutputPortRealSignal(S,i);
(*y1) =(*u1); //copia entrada para saida
mexPrintf("%s%fn","Avanco de tempo2->",timeOfNextHit);
c->AtualizaValoresdeAtributos(PowerResource,_classattribute[0],*u1,timeOfNextHit);
} // end else
} // end for i
}
/* Function: mdlTerminate */
static void mdlStart(SimStruct *S)
{
char *buf;
size_t buflen;
int status;
buflen = mxGetN((ssGetSFcnParam(S, 2)))*sizeof(mxChar)+1 ; // read 3rd param
buf = (char *)mxMalloc(buflen); //alloc mem
status = mxGetString((ssGetSFcnParam(S, 2)), buf,(mwSize)buflen);
ssGetPWork(S)[0] = (void *) new RTIFederate; // store new C++ object in the
RTIFederate *c = (RTIFederate *) ssGetPWork(S)[0];
c->InterpretaArqMDL(buf); // Rotina que trata da interpretacao dos objetos da norma IEC 61968
c->run();
...
}
在RTIFederate.cpp
之上,我声明了以下内容:
#include "RTIFedAmb.h"
#include "RTIFederate.h"
,在文件RTIFederate.h
中我声明:
class RTIFederate
{
public:
RTIambassador *rtiamb;
RTIFedAmb *fedamb;
// variables //
ObjectClassHandle _ClassObject[300];
AttributeHandle _classattribute[300];
string IEC_Model[29],IEC_Attribute[20];//
// public methods //
RTIFederate();
virtual ~RTIFederate();
...
}
extern ObjectClassHandle _ClassObject[300];
extern AttributeHandle _classattribute[300];
extern AttributeHandleSet attributeSet[300];
extern ObjectInstanceHandle ProtectedSwitch,Recloser,ThreePhaseBreaker,ACLineSegment,DistributedParametersLine;
extern RTIambassador *rtiamb;
extern RTIFedAmb *fedamb;
也有一段代码在RTIFedAmb.h:
//methods
RTIFedAmb();
virtual ~RTIFedAmb() throw();
谁能帮我解释一下我错过了什么?
所以,您希望在c++项目中包含c-lib。这很好,但你应该注意一件事:c++与c有点不同。你找到了一个很好的例子。c++会"变形"lib中的函数名,而C不会。尽管如此,您仍然可以使用c库。这样做:
extern "C" ObjectClassHandle _ClassObject[300];
extern "C" AttributeHandle _classattribute[300];
extern "C" AttributeHandleSet attributeSet[300];
extern "C" ObjectInstanceHandle ProtectedSwitch,Recloser,ThreePhaseBreaker,ACLineSegment,DistributedParametersLine;
extern "C" RTIambassador *rtiamb;
extern "C" RTIFedAmb *fedamb;
相关文章:
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector