Устранение "ошибки: 'mutex' в пространстве имен 'std' не называет тип" в OSE - PullRequest
0 голосов
/ 10 июня 2019

В настоящее время я нахожусь в процессе добавления возможностей в программный пакет для встраивания в операционную среду 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 в качестве опций компилятора, и все равно получаю ту же ошибку.)

...