我有一个C ++函数doSth,它将从类“canMsg”调用函数“checkFrame”,如下所示
#include "canMsg.h"
void doSth(char* canFrame){
map<int, double> returnedData;
CANMsg canMsg;
std::cout<<canFrame <<endl;
canMsg.checkFrame(canFrame);
}
在编译期间我没有收到任何错误,但是当我运行它时,它会执行std::cout<<canFrame <<endl;
语句并通过创建错误来崩溃
undefined symbol: _ZNSaIcEC1Ev, version GLIBCXX_3.4
任何想法如何解决这一问题?
我认为如果事情以“错误”的顺序联系起来,就会出现这种问题。我建议你尝试改变你传递给链接器的库的顺序。
(我实际上并不知道为什么订购很重要 - 但它有时会这样做。)
谢谢你的回复。该错误是由于我尝试返回本地声明的指针。在我将本地指针变量更改为静态之后,它完美无缺。基本思想是C ++不主张将局部变量的地址返回到函数外部。
查看this了解更多信息。
当依赖库(其中_ZNSaIcEC1Ev
id已定义)被编译为您当前拥有的其他版本的GLIBC(更新版本或更旧版本)时,可能会发生此错误。
尝试使用当前环境重新编译该库。
你也可以添加一个很好的开关到您的应用程序的LDFLAGS
:-Wl,--no-undefined
。然后你可以在编译时看到任何未定义的符号(不确定它是否对你的情况有帮助)。