解决OSE

时间:2019-06-10 17:00:32

标签: mutex ose

我目前正在为软件包添加功能,以使用ENEA的OSE进行构建。该软件已经在Windows和Linux中构建并运行,并且 现在,我的开发小组希望该软件能够在使用OSE(版本4.9)的平台上运行。 在OSE中编译时遇到了与使用互斥锁有关的构建错误-在Linux和Windows中都可以使用。 我只提供一段代码和使用mutx时出现的错误: 错误:名称空间“ std”中的“ mutex”未命名类型

我已经在线搜索错误“错误:名称空间“ std”中的“ mutex”未命名类型”。所有解决方案似乎都不特定于OSE。他们有适用于Windows和Linux的解决方案,但我没有遇到任何问题。尽管如此,我还是尝试将这些想法用于其他OS平台的解决方案,但没有一个适合我的情况。

我只提供一段代码和我看到的错误。 名为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: 在makefile中,我们定义了在构建OSE时要使用的CFLAGS和CPPFLAGS:

# 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:错误:名称空间“ std”中的“ mutex”未命名类型          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:错误:未使用的变量“锁定” [-Werror =未使用的变量]          std :: lock_guard lock(m_mutex);

仅在尝试进行OSE构建时看到这些错误。 Linux和Windows构建良好。我对OSE和Windows中提供的互斥文件进行了比较,它们略有不同,但是Mutex_base类和所有方法 似乎在那里。我已经搜索了我所看到的错误,并尝试了不同的方法(即使在Stack Overflow上也是如此),但是对于我在OSE中的情况没有什么特别的。我只是想知道在OSE中必须做些什么来解决此错误? (我也尝试过使用c ++ 0X和gnu ++ 11作为编译器选项,但仍然出现相同的错误。)

0 个答案:

没有答案