我目前正在为软件包添加功能,以使用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作为编译器选项,但仍然出现相同的错误。)