У меня есть функция 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
Любые идеи, как это исправить?
Эта ошибка может возникать, когда зависимая библиотека (где определен идентификатор _ZNSaIcEC1Ev) была скомпилирована для другой версии GLIBC (более новой или более старой), имеющейся у вас в настоящее время.
Попробуйте перекомпилировать эту библиотеку с вашей текущей средой.
Также вы можете добавить хороший переключатель в LDFLAGS вашего приложения: -Wl, — no-undefined. Затем вы можете увидеть любые неопределенные символы во время компиляции (не уверен, поможет ли это в вашей ситуации).
Я думаю, что такая проблема может возникнуть, если вещи связаны в «неправильном» порядке. Я предлагаю вам попробовать изменить порядок любых библиотек, которые вы передаете компоновщику.
(На самом деле я не знаю, почему порядок имеет значение, но иногда это так.)
Спасибо за ответы. Ошибка произошла из-за моей попытки вернуть локально объявленный указатель. После того, как я изменил локальную переменную-указатель на статическую, она работает отлично. Основная идея заключается в том, что C ++ не рекомендует возвращать адрес локальной переменной за пределы функции.
Посмотрите этот для дополнительной информации.