Ошибка поиска символа времени выполнения C ++, Ubuntu

У меня есть функция C ++ doSth, которая будет вызывать функцию «checkFrame» из класса «canMsg», как показано ниже

#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

Любые идеи, как это исправить?

0

Решение

Эта ошибка может возникать, когда зависимая библиотека (где определен идентификатор _ZNSaIcEC1Ev) была скомпилирована для другой версии GLIBC (более новой или более старой), имеющейся у вас в настоящее время.

Попробуйте перекомпилировать эту библиотеку с вашей текущей средой.

Также вы можете добавить хороший переключатель в LDFLAGS вашего приложения: -Wl, — no-undefined. Затем вы можете увидеть любые неопределенные символы во время компиляции (не уверен, поможет ли это в вашей ситуации).

0

Другие решения

Я думаю, что такая проблема может возникнуть, если вещи связаны в «неправильном» порядке. Я предлагаю вам попробовать изменить порядок любых библиотек, которые вы передаете компоновщику.

(На самом деле я не знаю, почему порядок имеет значение, но иногда это так.)

0

Спасибо за ответы. Ошибка произошла из-за моей попытки вернуть локально объявленный указатель. После того, как я изменил локальную переменную-указатель на статическую, она работает отлично. Основная идея заключается в том, что C ++ не рекомендует возвращать адрес локальной переменной за пределы функции.

Посмотрите этот для дополнительной информации.

0
По вопросам рекламы [email protected]