C ++运行时符号查找错误,ubuntu

时间:2013-06-03 10:44:18

标签: c++ ubuntu runtime undefined-symbol

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

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

3 个答案:

答案 0 :(得分:0)

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

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

此外,您还可以添加一个很好的切换到应用的LDFLAGS-Wl,--no-undefined。然后你可以在编译时看到任何未定义的符号(不确定它是否对你的情况有帮助。)

答案 1 :(得分:0)

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

(我实际上并不知道为什么订购很重要 - 但它有时会这样做。)

答案 2 :(得分:0)

感谢您的回复。该错误是由于我尝试返回本地声明的指针。在我将本地指针变量更改为静态之后,它完美无缺。基本思想是C ++不主张将局部变量的地址返回到函数外部。

查看this了解更多信息。