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

问题描述 投票:0回答:3

我有一个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++ ubuntu runtime undefined-symbol
3个回答
0
投票

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

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


0
投票

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

查看this了解更多信息。


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.