获取错误" cc1plus:错误:无法识别的命令行选项" -std = c ++ 11""当我在Qt创建者上运行代码时

时间:2017-03-28 23:01:37

标签: c++11 makefile qt-creator qmake

我从Github上的以下源代码中获取了代码,并尝试在RHEL Red Hat 4.4.7-17上从Qt运行它:

https://github.com/neveraway/oclJPEGDecoder

我解压缩了项目文件夹并在其中运行了qmake -project。我在Qt创建者中打开了文件,并进一步修改了我的.pro文件以链接OpenCL源并添加了CXX和CFLAGS。

我的.pro文件如下所示:

######################################################################
# Automatically generated by qmake (1.07a) Tue Mar 28 14:51:49 2017
######################################################################

TEMPLATE = app
DEPENDPATH += src \
              /usr/local/cuda-7.0/lib64/

INCLUDEPATH += . src \
                /usr/local/cuda-7.0/lib64/\
               /usr/local/cuda-7.0/include/
# Input
HEADERS += src/bitstream.h \
           src/bmp.h \
           src/decoder.h \
           src/huffman.h \
           src/idct.h \
           src/jpeg.h \
           src/macro.h \
           src/stdafx.h \
           src/targetver.h \
           src/zigzag.h

SOURCES += src/bitstream.cpp \
           src/cpuIDCT8x8.cpp \
           src/decoder.cpp \
           src/huffman.cpp \
           src/main.cpp \
           src/oclDCT8x8.cpp \
           src/parser.cpp \
           src/stdafx.cpp \
    src/main.cpp

LIBS += -L/usr/local/cuda-7.0/lib64/ -lOpenCL

QMAKE_CXXFLAGS += -std=c++11

QMAKE_CFLAGS += -std=c99

DISTFILES += \
    src/idct8x8.cl \
    oclJPEGDecoder.sln \
    oclJPEGDecoder.vcxproj \
    oclJPEGDecoder.vcxproj.filters \
    README.md \
    test/JPEG_example_JPG_RIP_050.jpg

当我点击Run qmake然后点击Build All时,这就是我在"编译输出"

下看到的内容
18:08:23: Configuration unchanged, skipping qmake step.
18:08:23: Starting: "/usr/bin/make" 
Makefile:634: warning: overriding commands for target `main.o'
Makefile:603: warning: ignoring old commands for target `main.o'
g++ -c -pipe -std=c++11 -g -std=gnu++0x -Wall -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I../oclJPEGDecoder-master -I. -I../oclJPEGDecoder-master -I../oclJPEGDecoder-master/src -I/usr/local/cuda-7.0/lib64 -I/usr/local/cuda-7.0/include -I/opt/Qt5.6.2/5.6/gcc_64/include -I/opt/Qt5.6.2/5.6/gcc_64/include/QtGui -I/opt/Qt5.6.2/5.6/gcc_64/include/QtCore -I. -I/opt/Qt5.6.2/5.6/gcc_64/mkspecs/linux-g++ -o bitstream.o ../oclJPEGDecoder-master/src/bitstream.cpp
cc1plus: error: unrecognized command line option "-std=c++11"
make: *** [bitstream.o] Error 1
18:08:23: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project oclJPEGDecoder-master (kit: Desktop Qt 5.6.2 GCC 64bit)
When executing step "Make"
18:08:23: Elapsed time: 00:00.

我的Makefile具有以下内容:

#############################################################################
# Makefile for building: oclJPEGDecoder-master
# Generated by qmake (3.0) (Qt 5.6.2)
# Project:  ../oclJPEGDecoder-master/oclJPEGDecoder-master.pro
# Template: app
# Command: /opt/Qt5.6.2/5.6/gcc_64/bin/qmake -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug -o Makefile ../oclJPEGDecoder-master/oclJPEGDecoder-master.pro
#############################################################################

MAKEFILE      = Makefile

####### Compiler, tools and options

CC            = gcc
CXX           = g++
DEFINES       = -DQT_QML_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
CFLAGS        = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS      = -pipe -std=c++11 -g -std=gnu++0x -Wall -W -D_REENTRANT -fPIC $(DEFINES)
INCPATH       = -I../oclJPEGDecoder-master -I. -I../oclJPEGDecoder-master -I../oclJPEGDecoder-master/src -I/usr/local/cuda-7.0/lib64 -I/usr/local/cuda-7.0/include -I/opt/Qt5.6.2/5.6/gcc_64/include -I/opt/Qt5.6.2/5.6/gcc_64/include/QtGui -I/opt/Qt5.6.2/5.6/gcc_64/include/QtCore -I. -I/opt/Qt5.6.2/5.6/gcc_64/mkspecs/linux-g++
QMAKE         = /opt/Qt5.6.2/5.6/gcc_64/bin/qmake
DEL_FILE      = rm -f
CHK_DIR_EXISTS= test -d
MKDIR         = mkdir -p
COPY          = cp -f
COPY_FILE     = cp -f
COPY_DIR      = cp -f -R
INSTALL_FILE  = install -m 644 -p
INSTALL_PROGRAM = install -m 755 -p
INSTALL_DIR   = cp -f -R
DEL_FILE      = rm -f
SYMLINK       = ln -f -s
DEL_DIR       = rmdir
MOVE          = mv -f
TAR           = tar -cf
COMPRESS      = gzip -9f
DISTNAME      = oclJPEGDecoder-master1.0.0
DISTDIR = /root/Downloads/build-oclJPEGDecoder-master-Desktop_Qt_5_6_2_GCC_64bit-Debug/.tmp/oclJPEGDecoder-master1.0.0
LINK          = g++
LFLAGS        = -Wl,-rpath,/opt/Qt5.6.2/5.6/gcc_64/lib
LIBS          = $(SUBLIBS) -L/usr/local/cuda-7.0/lib64/ -lOpenCL -L/opt/Qt5.6.2/5.6/gcc_64/lib -lQt5Gui -L/usr/lib64 -lQt5Core -lGL -lpthread 
AR            = ar cqs
RANLIB        = 
SED           = sed
STRIP         = strip

我的.o文件如下所示:

####### Compile

bitstream.o: ../oclJPEGDecoder-master/src/bitstream.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h \
        ../oclJPEGDecoder-master/src/macro.h \
        ../oclJPEGDecoder-master/src/bitstream.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o bitstream.o ../oclJPEGDecoder-master/src/bitstream.cpp

cpuIDCT8x8.o: ../oclJPEGDecoder-master/src/cpuIDCT8x8.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h \
        ../oclJPEGDecoder-master/src/macro.h \
        ../oclJPEGDecoder-master/src/idct.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o cpuIDCT8x8.o ../oclJPEGDecoder-master/src/cpuIDCT8x8.cpp

decoder.o: ../oclJPEGDecoder-master/src/decoder.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h \
        ../oclJPEGDecoder-master/src/macro.h \
        ../oclJPEGDecoder-master/src/jpeg.h \
        ../oclJPEGDecoder-master/src/bmp.h \
        ../oclJPEGDecoder-master/src/bitstream.h \
        ../oclJPEGDecoder-master/src/huffman.h \
        ../oclJPEGDecoder-master/src/zigzag.h \
        ../oclJPEGDecoder-master/src/idct.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o decoder.o ../oclJPEGDecoder-master/src/decoder.cpp

huffman.o: ../oclJPEGDecoder-master/src/huffman.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h \
        ../oclJPEGDecoder-master/src/macro.h \
        ../oclJPEGDecoder-master/src/huffman.h \
        ../oclJPEGDecoder-master/src/bitstream.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o huffman.o ../oclJPEGDecoder-master/src/huffman.cpp

main.o: ../oclJPEGDecoder-master/src/main.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h \
        ../oclJPEGDecoder-master/src/macro.h \
        ../oclJPEGDecoder-master/src/bitstream.h \
        ../oclJPEGDecoder-master/src/huffman.h \
        ../oclJPEGDecoder-master/src/idct.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../oclJPEGDecoder-master/src/main.cpp

oclDCT8x8.o: ../oclJPEGDecoder-master/src/oclDCT8x8.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h \
        /usr/local/cuda-7.0/include/CL/opencl.h \
        /usr/local/cuda-7.0/include/CL/cl.h \
        /usr/local/cuda-7.0/include/CL/cl_platform.h \
        /usr/local/cuda-7.0/include/CL/cl_gl.h \
        /usr/local/cuda-7.0/include/CL/cl_gl_ext.h \
        /usr/local/cuda-7.0/include/CL/cl_ext.h \
        ../oclJPEGDecoder-master/src/macro.h \
        ../oclJPEGDecoder-master/src/idct.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o oclDCT8x8.o ../oclJPEGDecoder-master/src/oclDCT8x8.cpp

parser.o: ../oclJPEGDecoder-master/src/parser.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h \
        ../oclJPEGDecoder-master/src/macro.h \
        ../oclJPEGDecoder-master/src/jpeg.h \
        ../oclJPEGDecoder-master/src/decoder.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o parser.o ../oclJPEGDecoder-master/src/parser.cpp

stdafx.o: ../oclJPEGDecoder-master/src/stdafx.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o stdafx.o ../oclJPEGDecoder-master/src/stdafx.cpp

main.o: ../oclJPEGDecoder-master/src/main.cpp ../oclJPEGDecoder-master/src/stdafx.h \
        ../oclJPEGDecoder-master/src/targetver.h \
        ../oclJPEGDecoder-master/src/macro.h \
        ../oclJPEGDecoder-master/src/bitstream.h \
        ../oclJPEGDecoder-master/src/huffman.h \
        ../oclJPEGDecoder-master/src/idct.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../oclJPEGDecoder-master/src/main.cpp

####### Install

install:  FORCE

uninstall:  FORCE

FORCE:

第二次尝试-std=c++0x

我将CXX_FLAGS命令更改为QMAKE_CXXFLAGS += -std=c++0x并在我的.pro文件中保留其他所有内容。 当我在进行更改后点击Build All时,这是我得到的输出"编译输出":

18:38:06: Running steps for project oclJPEGDecoder-master...
18:38:06: Configuration unchanged, skipping qmake step.
18:38:06: Starting: "/usr/bin/make" 
Makefile:634: warning: overriding commands for target `main.o'
Makefile:603: warning: ignoring old commands for target `main.o'
g++ -c -pipe -std=c++0x -g -std=gnu++0x -Wall -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I../oclJPEGDecoder-master -I. -I../oclJPEGDecoder-master -I../oclJPEGDecoder-master/src -I/usr/local/cuda-7.0/lib64 -I/usr/local/cuda-7.0/include -I/opt/Qt5.6.2/5.6/gcc_64/include -I/opt/Qt5.6.2/5.6/gcc_64/include/QtGui -I/opt/Qt5.6.2/5.6/gcc_64/include/QtCore -I. -I/opt/Qt5.6.2/5.6/gcc_64/mkspecs/linux-g++ -o bitstream.o ../oclJPEGDecoder-master/src/bitstream.cpp
In file included from ../oclJPEGDecoder-master/src/bitstream.cpp:4:
../oclJPEGDecoder-master/src/bitstream.h:368: error: 'nullptr' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h:368: error: ISO C++ forbids initialization of member 'mBitReservoir'
../oclJPEGDecoder-master/src/bitstream.h:368: error: making 'mBitReservoir' static
../oclJPEGDecoder-master/src/bitstream.h:368: error: invalid in-class initialization of static data member of non-integral type 'uint8_t*'
../oclJPEGDecoder-master/src/bitstream.h:369: error: ISO C++ forbids initialization of member 'mCapacity'
../oclJPEGDecoder-master/src/bitstream.h:369: error: making 'mCapacity' static
../oclJPEGDecoder-master/src/bitstream.h:369: error: ISO C++ forbids in-class initialization of non-const static member 'mCapacity'
../oclJPEGDecoder-master/src/bitstream.h: In member function 'void BitStream::free()':
../oclJPEGDecoder-master/src/bitstream.h:96: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h:96: error: 'nullptr' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h:98: error: type '<type error>' argument given to 'delete', expected pointer
../oclJPEGDecoder-master/src/bitstream.h: In member function 'void BitStream::trim()':
../oclJPEGDecoder-master/src/bitstream.h:110: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'bool BitStream::reserve(size_t)':
../oclJPEGDecoder-master/src/bitstream.h:137: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'bool BitStream::frontBit() const':
../oclJPEGDecoder-master/src/bitstream.h:209: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'uint8_t BitStream::frontFullByte() const':
../oclJPEGDecoder-master/src/bitstream.h:214: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'uint32_t BitStream::front9b(uint8_t) const':
../oclJPEGDecoder-master/src/bitstream.h:219: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'uint32_t BitStream::front17b(uint8_t) const':
../oclJPEGDecoder-master/src/bitstream.h:227: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'uint32_t BitStream::front25b(uint8_t) const':
../oclJPEGDecoder-master/src/bitstream.h:235: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'void BitStream::writeBit(bool)':
../oclJPEGDecoder-master/src/bitstream.h:246: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h:248: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'const uint8_t* BitStream::frontData() const':
../oclJPEGDecoder-master/src/bitstream.h:307: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'uint32_t BitStream::cachedFrontBits(int)':
../oclJPEGDecoder-master/src/bitstream.h:340: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.h: In member function 'void BitStream::moveDataTo(uint8_t*)':
../oclJPEGDecoder-master/src/bitstream.h:398: error: 'mBitReservoir' was not declared in this scope
../oclJPEGDecoder-master/src/bitstream.cpp: In member function 'size_t BitStream::append(const uint8_t*, size_t)':
../oclJPEGDecoder-master/src/bitstream.cpp:22: error: 'mBitReservoir' was not declared in this scope
make: *** [bitstream.o] Error 1
18:38:06: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project oclJPEGDecoder-master (kit: Desktop Qt 5.6.2 GCC 64bit)
When executing step "Make"
18:38:06: Elapsed time: 00:00.

由于与编译器不兼容,我在bitstream.c中遇到错误。

如何解决此问题?我是否绝对需要安装新版本的g ++才能使此代码正常工作?我是否需要在Makefile

中加入任何内容

请指导我这件事。

编辑:

g++ --version的输出结果:

g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我输入了yum install rpmdevtools rpm-build,它给了我以下回复:

Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security,
              : subscription-manager
Setting up Install Process
Package rpmdevtools-7.5-2.el6.noarch already installed and latest version
Package rpm-build-4.8.0-55.el6.x86_64 already installed and latest version
Nothing to do

我想在我的系统上获取有关gcc的更多信息,因此我输入了以下命令:

yum list available |grep gcc

它给了我这样的答复:

compat-gcc-34.x86_64              3.4.6-19.el6           rhel-6-workstation-rpms
compat-gcc-34-c++.x86_64          3.4.6-19.el6           rhel-6-workstation-rpms
compat-gcc-34-g77.x86_64          3.4.6-19.el6           rhel-6-workstation-rpms
gcc-gnat.x86_64                   4.4.7-18.el6           rhel-6-workstation-rpms
gcc-java.x86_64                   4.4.7-18.el6           rhel-6-workstation-rpms
gcc-objc.x86_64                   4.4.7-18.el6           rhel-6-workstation-rpms
gcc-objc++.x86_64                 4.4.7-18.el6           rhel-6-workstation-rpms

1 个答案:

答案 0 :(得分:1)

您的4.4.7版gcc太旧而无法完全启用C ++ 11功能。 您需要将编译器升级到高于4.6的版本(至少),或者如果您可以升级,请升级包含更新编译器的发行版(假设为RHEL 7)。