【问题标题】:Receiving main.o error收到 main.o 错误
【发布时间】:2015-01-07 13:16:27
【问题描述】:

Qt Creator 中的编译器不支持 c++11。所以在我的 .pro 文件中我添加了QMAKE_CXXFLAGS += -std=c++11 所以我的 .pro 文件现在看起来像这样:

TEMPLATE = app
QMAKE_CXXFLAGS += -std=c++11
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp \
    server.cpp \
    Section.cpp \
    mainwindow.cpp \
    main2.cpp \
    client.cpp \
    Chapter.cpp \
    Book.cpp

HEADERS += \
    Year.h \
    Term.h \
    Student.h \
    Section.h \
    mainwindow.h \
    Load.h \
    List.h \
    Course.h \
    ContentManager.h \
    client.h \
    Chapter.h \
    Book.h

OTHER_FILES += \
    Makefile \
    D2.pro.user

这是我的生成文件:

#############################################################################
# Makefile for building: D2
# Generated by qmake (2.01a) (Qt 4.8.1) on: Mon Nov 10 23:00:21 2014
# Project:  D2.pro
# Template: app
# Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug CONFIG+=declarative_debug -o Makefile D2.pro
#############################################################################

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

CC            = gcc
CXX           = g++
DEFINES       = -DQT_WEBKIT
CFLAGS        = -pipe -g -Wall -W $(DEFINES)
CXXFLAGS      = -pipe -std=c++11 -g -Wall -W $(DEFINES)
INCPATH       = -I/usr/share/qt4/mkspecs/linux-g++ -I.
LINK          = g++
LFLAGS        = 
LIBS          = $(SUBLIBS)    
AR            = ar cqs
RANLIB        = 
QMAKE         = /usr/bin/qmake-qt4
TAR           = tar -cf
COMPRESS      = gzip -9f
COPY          = cp -f
SED           = sed
COPY_FILE     = $(COPY)
COPY_DIR      = $(COPY) -r
STRIP         = strip
INSTALL_FILE  = install -m 644 -p
INSTALL_DIR   = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE      = rm -f
SYMLINK       = ln -f -s
DEL_DIR       = rmdir
MOVE          = mv -f
CHK_DIR_EXISTS= test -d
MKDIR         = mkdir -p

####### Output directory

OBJECTS_DIR   = ./

####### Files

SOURCES       = main.cpp \
        server.cpp \
        Section.cpp \
        mainwindow.cpp \
        main2.cpp \
        client.cpp \
        Chapter.cpp \
        Book.cpp 
OBJECTS       = main.o \
        server.o \
        Section.o \
        mainwindow.o \
        main2.o \
        client.o \
        Chapter.o \
        Book.o
DIST          = /usr/share/qt4/mkspecs/common/unix.conf \
        /usr/share/qt4/mkspecs/common/linux.conf \
        /usr/share/qt4/mkspecs/common/gcc-base.conf \
        /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
        /usr/share/qt4/mkspecs/common/g++-base.conf \
        /usr/share/qt4/mkspecs/common/g++-unix.conf \
        /usr/share/qt4/mkspecs/qconfig.pri \
        /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
        /usr/share/qt4/mkspecs/features/qt_functions.prf \
        /usr/share/qt4/mkspecs/features/qt_config.prf \
        /usr/share/qt4/mkspecs/features/exclusive_builds.prf \
        /usr/share/qt4/mkspecs/features/default_pre.prf \
        /usr/share/qt4/mkspecs/features/debug.prf \
        /usr/share/qt4/mkspecs/features/default_post.prf \
        /usr/share/qt4/mkspecs/features/declarative_debug.prf \
        /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
        /usr/share/qt4/mkspecs/features/warn_on.prf \
        /usr/share/qt4/mkspecs/features/resources.prf \
        /usr/share/qt4/mkspecs/features/uic.prf \
        /usr/share/qt4/mkspecs/features/yacc.prf \
        /usr/share/qt4/mkspecs/features/lex.prf \
        /usr/share/qt4/mkspecs/features/include_source_dir.prf \
        D2.pro
QMAKE_TARGET  = D2
DESTDIR       = 
TARGET        = D2

first: all
####### Implicit rules

.SUFFIXES: .o .c .cpp .cc .cxx .C

.cpp.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cc.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cxx.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.C.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.c.o:
    $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"

####### Build rules

all: Makefile $(TARGET)

$(TARGET):  $(OBJECTS)  
    $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
    { test -n "$(DESTDIR)" && DESTDIR="$(DESTDIR)" || DESTDIR=.; } && test $$(gdb --version | sed -e 's,[^0-9]\+\([0-9]\)\.\([0-9]\).*,\1\2,;q') -gt 72 && gdb --nx --batch --quiet -ex 'set confirm off' -ex "save gdb-index $$DESTDIR" -ex quit '$(TARGET)' && test -f $(TARGET).gdb-index && objcopy --add-section '.gdb_index=$(TARGET).gdb-index' --set-section-flags '.gdb_index=readonly' '$(TARGET)' '$(TARGET)' && rm -f $(TARGET).gdb-index || true

Makefile: D2.pro  /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \
        /usr/share/qt4/mkspecs/common/linux.conf \
        /usr/share/qt4/mkspecs/common/gcc-base.conf \
        /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
        /usr/share/qt4/mkspecs/common/g++-base.conf \
        /usr/share/qt4/mkspecs/common/g++-unix.conf \
        /usr/share/qt4/mkspecs/qconfig.pri \
        /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
        /usr/share/qt4/mkspecs/features/qt_functions.prf \
        /usr/share/qt4/mkspecs/features/qt_config.prf \
        /usr/share/qt4/mkspecs/features/exclusive_builds.prf \
        /usr/share/qt4/mkspecs/features/default_pre.prf \
        /usr/share/qt4/mkspecs/features/debug.prf \
        /usr/share/qt4/mkspecs/features/default_post.prf \
        /usr/share/qt4/mkspecs/features/declarative_debug.prf \
        /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
        /usr/share/qt4/mkspecs/features/warn_on.prf \
        /usr/share/qt4/mkspecs/features/resources.prf \
        /usr/share/qt4/mkspecs/features/uic.prf \
        /usr/share/qt4/mkspecs/features/yacc.prf \
        /usr/share/qt4/mkspecs/features/lex.prf \
        /usr/share/qt4/mkspecs/features/include_source_dir.prf
    $(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug CONFIG+=declarative_debug -o Makefile D2.pro
/usr/share/qt4/mkspecs/common/unix.conf:
/usr/share/qt4/mkspecs/common/linux.conf:
/usr/share/qt4/mkspecs/common/gcc-base.conf:
/usr/share/qt4/mkspecs/common/gcc-base-unix.conf:
/usr/share/qt4/mkspecs/common/g++-base.conf:
/usr/share/qt4/mkspecs/common/g++-unix.conf:
/usr/share/qt4/mkspecs/qconfig.pri:
/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri:
/usr/share/qt4/mkspecs/features/qt_functions.prf:
/usr/share/qt4/mkspecs/features/qt_config.prf:
/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
/usr/share/qt4/mkspecs/features/default_pre.prf:
/usr/share/qt4/mkspecs/features/debug.prf:
/usr/share/qt4/mkspecs/features/default_post.prf:
/usr/share/qt4/mkspecs/features/declarative_debug.prf:
/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
/usr/share/qt4/mkspecs/features/warn_on.prf:
/usr/share/qt4/mkspecs/features/resources.prf:
/usr/share/qt4/mkspecs/features/uic.prf:
/usr/share/qt4/mkspecs/features/yacc.prf:
/usr/share/qt4/mkspecs/features/lex.prf:
/usr/share/qt4/mkspecs/features/include_source_dir.prf:
qmake:  FORCE
    @$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug CONFIG+=declarative_debug -o Makefile D2.pro

dist: 
    @$(CHK_DIR_EXISTS) .tmp/D21.0.0 || $(MKDIR) .tmp/D21.0.0 
    $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/D21.0.0/ && (cd `dirname .tmp/D21.0.0` && $(TAR) D21.0.0.tar D21.0.0 && $(COMPRESS) D21.0.0.tar) && $(MOVE) `dirname .tmp/D21.0.0`/D21.0.0.tar.gz . && $(DEL_FILE) -r .tmp/D21.0.0


clean:compiler_clean 
    -$(DEL_FILE) $(OBJECTS)
    -$(DEL_FILE) *~ core *.core


####### Sub-libraries

distclean: clean
    -$(DEL_FILE) $(TARGET) 
    -$(DEL_FILE) Makefile


check: first

compiler_rcc_make_all:
compiler_rcc_clean:
compiler_uic_make_all:
compiler_uic_clean:
compiler_image_collection_make_all: qmake_image_collection.cpp
compiler_image_collection_clean:
    -$(DEL_FILE) qmake_image_collection.cpp
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: 

####### Compile

main.o: main.cpp Course.h \
        Year.h \
        Term.h \
        Student.h \
        ContentManager.h \
        Book.h \
        List.h \
        Chapter.h \
        Section.h \
        Load.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp

server.o: server.cpp 
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o server.o server.cpp

Section.o: Section.cpp Section.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Section.o Section.cpp

mainwindow.o: mainwindow.cpp mainwindow.h \
        client.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp

main2.o: main2.cpp mainwindow.h \
        client.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main2.o main2.cpp

client.o: client.cpp client.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o client.o client.cpp

Chapter.o: Chapter.cpp Chapter.h \
        List.h \
        Section.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Chapter.o Chapter.cpp

Book.o: Book.cpp Book.h \
        List.h \
        Chapter.h \
        Section.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Book.o Book.cpp

####### Install

install:   FORCE

uninstall:   FORCE

FORCE:

很遗憾,我收到了这个错误:[main.o] Error 1

此错误在添加 c++11 之前不存在。我无法解决这个问题。有人可以帮我吗?

更新: 在 Qt creator 的命令行中输入 gcc -v 给了我:

Starting command 'gcc -v'
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 

'gcc -v' finished

我认为编译器版本是4.6.3,也就是说它支持C++11

【问题讨论】:

  • 1.你在制作之前尝试过清洁吗? 2.你确定之前没有其他错误Error 1
  • "Qt" 不包括 C++ 编译器。您可能指的是 Qt Creator,它是一个可以使用 C++ 编译器的 IDE。无论哪种方式,您都需要弄清楚您实际使用的是哪个 C++ 编译器/版本。如果您使用的是旧的并且不支持 C++11,添加 -std=c++11 标志将无济于事 - 它只是一个无法识别的标志。
  • 此外,该错误消息应该有更多上下文。发布它。
  • 您可以尝试将CONFIG += c++11 添加到您的项目文件中。这是添加对 c++11 的支持的常用方法。
  • 这里有一些关于 gcc 4.6.3 支持的标志和特性的信息:stackoverflow.com/questions/17378969/… 你应该尝试从命令行用不同的标志编译一个简单的 hello word 程序,看看什么是有效的然后将其添加到 .pro 文件中的 QMAKE_CXXFLAGS 中。您也可以考虑尝试升级编译器。

标签: c++ qt c++11


【解决方案1】:

该错误消息不仅仅是[main.o] Error 1。粘贴整个错误消息。

但是,对您的问题的一些猜测可能包括:

  • 您在链接器命令中同时使用了$(OBJCOMP)$(SUBLIBS),但它们都没有在任何地方定义。这可能是错误的原因吗?

  • 某些旧版本的 g++(例如 4.6.3)拼写选项 -std=c++0x 而不是 -std=c++11。根据g++ --version 的输出,您可能需要使用较旧的拼写。

  • 您可能需要将-std=c++11 添加到LFLAGS 以及CXXFLAGS,以确保您链接到正确的C++ 库。 (我不知道这对任何系统来说都很重要,但无论如何我总是试图让它正确。)

【讨论】:

  • 相信我,这是唯一的错误。我尝试了你所有的建议,但没有一个能解决问题,很遗憾
【解决方案2】:

我也遇到过几次这个错误。 坦率地说,我对错误消息中缺少信息感到惊讶,嗯,我的意思是,基本上没有。

这是我对错误含义的解释: ma​​in.o 不存在/找不到/完全损坏。

在这种情况下,您可能会遇到以下几种情况:

  • 应该写入 main.o 的位置被写保护。 (您可以尝试在 Qt creator 中切换 shadowbuild)
  • 空间不足(我知道,市场上的 8TB HDD 听起来很荒谬。这就是我遇到的情况。)
  • 您的项目配置错误。 (有时路径中的 / 和 \ 之间存在差异)
  • 您的编译器配置错误。
  • 您的代码存在严重问题。

【讨论】:

    【解决方案3】:

    很遗憾,我收到此错误:[main.o] 错误 1 ...... 相信我,那是唯一的错误。我尝试了你所有的建议,但没有一个能解决问题,很遗憾

    有趣的是,Qt Creator 不会删除您项目的 Makefile,即使您进行了 CleaningRebuilding

    这些选项确实会删除您的输出二进制文件(包括.o 文件),但有时它还不够,尤其是在您编辑.pro 文件或.qrc 文件时。

    在大多数情况下,构建错误消息不清楚并且声称是,“它以前工作过!”值得尝试确保您完全从头开始构建它通过:

    1. 转到您的构建目录,例如:

      ../build-*
      
    2. 如有必要,删除所有相关的Makefile 脚本和其他脚本,

    3. 然后重新构建它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      相关资源
      最近更新 更多