В настоящее время я нахожусь в процессе добавления возможностей в программный пакет для встраивания в операционную среду ENEA.Программное обеспечение уже собирается и работает в Windows и Linux, и теперь моя группа разработчиков хочет, чтобы это программное обеспечение работало на платформе, которая использует OSE (версия 4.9).Я сталкиваюсь с ошибкой сборки при компиляции в OSE, которая связана с использованием mutex - то, что работает как в Linux, так и в Windows.Я просто предоставлю фрагмент кода и ошибку, которую я вижу при использовании mutx: error: 'mutex' в пространстве имен 'std' не называет тип
Я выполнил поиск ошибки в Интернете."ошибка: 'мьютекс' в пространстве имен 'std' не называет тип" Все разрешения не относятся к OSE.У них есть решения для Windows и Linux, но я ничего не видел для своей ситуации.Тем не менее, я попробовал эти идеи для решений на этих других платформах ОС, но ни одна из них не сработала для моей ситуации.
Я просто предоставлю фрагмент кода и ошибку, которую вижу.Фрагмент кода из файла с именем LogHelper.h:
#include <string>
#include <mutex>
#include <deque>
#include <vector>
#include <iostream>
template <typename PROTOCOL_T>
class LogHelper
{
private:
std::mutex m_mutex;
....(more code)...
}
template <typename PROTOCOL_T>
void LogHelper<PROTOCOL_T>::log(PROTOCOL_T severity, const char* message)
{
std::lock_guard<std::mutex> lock(m_mutex);
...(more code)...
}
и Makefile: в make-файле мы определили CFLAGS и CPPFLAGS для использования при сборке OSE:
# OSE Paths
OSE_TOP = /tools/ose/OSE5.8
OSE_POWERPC_TOP = $(OSE_TOP)/gcc_linux_powerpc_4.9
OSE_BIN = $(OSE_POWERPC_TOP)/bin
OSE_INCLUDE = $(OSE_TOP)/include
OSE_INCLUDES = -I$(OSE_INCLUDE) \
-I$(OSE_INCLUDE)/gcc \
-I$(OSE_POWERPC_TOP)/lib/powerpc \
-I$(OSE_POWERPC_TOP)/lib/gcc/powerpc-ose-eabi/4.9/include \
-I$(OSE_POWERPC_TOP)/lib/gcc/powerpc-ose-eabi/4.9/include-fixed \
-I$(OSE_POWERPC_TOP)/powerpc-ose-eabi/include/c++/4.9 \
-I$(OSE_POWERPC_TOP)/powerpc-ose-eabi/include/c++/4.9/powerpc-ose-eabi \
-I$(OSE_POWERPC_TOP)/powerpc-ose-eabi/include/c++/4.9/bits
testoselib.a ose: CFLAGS = -gdwarf-2 -Wall -Werror -fno-common \
-fno-builtin -fno-strict-aliasing -fsigned-char -mpowerpc -mmultiple - mupdate \
-mno-string -mno-sdata -mregnames -msoft-float -G0 -std=c99 -mcpu=8548 \
-lcext -lcrt -lstdc++ -lm -lgcc -lzlib
testoselib.a ose: CPPFLAGS = -gdwarf-2 -Wall -Werror -fno-common \
-fno-builtin -fno-strict-aliasing -fsigned-char -fpermissive -mpowerpc -mmultiple -mupdate \
-mno-string -mno-sdata -mregnames -msoft-float -G0 -std=c++11 -mcpu=8548 \
-lcext -lcrt -lstdc++ -lm -lgcc -lzlib
%.c.o: %.c
$(QUIET)$(ECHO) "Compiling $@"
$(QUIET)$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(QUIET)$(CC) -MM $(CFLAGS) $(INCLUDES) $*.c > $*.d
%.cpp.o: %.cpp
$(QUIET)$(ECHO) "Compiling $@"
$(QUIET)$(CXX) $(CPPFLAGS) $(INCLUDES) -c $< -o $@
$(QUIET)$(CXX) -MM $(CPPFLAGS) $(INCLUDES) $*.cpp > $*.d
.Я вижу следующие сообщения об ошибках:
LogHelper.h: 168: 14: ошибка: 'mutex' в пространстве имен 'std' не называет тип std :: mutex m_mutex;
LogHelper.h: 280: 41: ошибка: недопустимый тип в объявлении перед '(' токен std :: lock_guard lock (m_mutex); ^ LogHelper.h: 280: 42: ошибка: 'm_mutex' не был объявлен в этой области std :: lock_guard lock(m_mutex);
LogHelper.h: 280: 37: ошибка: неиспользуемая переменная 'lock' [-Werror = unused-variable] std :: lock_guard lock (m_mutex);
только см.эти ошибки при попытке выполнить сборку OSE. Linux и Windows работают нормально. Я провел сравнение между файлами взаимных исключений, предоставленными в OSE и в Windows, и они немного отличаются, но класс mutex_base и все методы, по-видимому, присутствуют.Я сделал поиск ошибки, которую я вижу, и пробовал разные вещи (канунна переполнение стека), но ничего не было характерно для моей ситуации в OSE.Мне просто интересно, что я должен сделать по-другому в OSE, чтобы устранить эту ошибку?(Я также пробовал c ++ 0X и gnu ++ 11 в качестве опций компилятора, и все равно получаю ту же ошибку.)