1

我有一个 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

任何想法如何解决这一问题?

4

3 回答 3

0

我认为如果事情以“错误”的顺序联系起来,就会出现这种问题。我建议您尝试更改传递给链接器的任何库的顺序。

(我实际上不知道为什么排序很重要 - 但有时确实如此。)

于 2013-06-03T10:58:33.510 回答
0

感谢您的回复。该错误是由于我试图返回一个本地声明的指针。在我将局部指针变量更改为静态后,它可以完美运行。基本思想是 C++ 不提倡将局部变量的地址返回到函数外部。

查看以获取更多信息。

于 2013-06-03T16:55:08.253 回答
0

_ZNSaIcEC1Ev当为您当前拥有的其他版本的 GLIBC(新版本或更旧版本)编译依赖库(其中定义了 id)时,可能会发生此错误。

尝试使用当前环境重新编译该库。

您还可以为LDFLAGS您的应用添加不错的开关:-Wl,--no-undefined. 然后你可以在编译时看到任何未定义的符号(不确定它是否对你的情况有帮助)。

于 2013-06-03T10:53:17.973 回答