0

I am trying to use Qt to make my cpp codes nicer to use. So I exploited the qmake -project to subsequently generate a Makefile. Nevertheless even with the simplest example, when executing the main.o file obtaining by typing make, I am getting bash: ./main.o: cannot execute binary file: Exec format error.

So I looked on the internet, and this problem is often related to architecture incompatibilities. That's why I exploited file main.o and uname -a commands in terminal. To my surprise, they respectively returned:

    main.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
    Linux mario-Inspiron-7577 4.15.0-64-generic #73-Ubuntu SMP Thu Sep 12 13:16:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Which to me doesn't seem to be conflicting. Am I missing out on something huge? What could I do to make it run smoothly?

If it can be of any help as suggested by @NathanOliver, here is my Makefile, generated with qmake:

#############################################################################
# Makefile for building: QTexample
# Generated by qmake (3.1) (Qt 5.9.5)
# Project:  QTexample.pro
# Template: app
# Command: /home/mario/anaconda3/bin/qmake -o Makefile QTexample.pro
#############################################################################

MAKEFILE      = Makefile

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

CC            = gcc
CXX           = g++
DEFINES       = -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
CFLAGS        = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS      = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
INCPATH       = -I. -I. -I../../anaconda3/include/qt -I../../anaconda3/include/qt/QtWidgets -I../../anaconda3/include/qt/QtGui -I../../anaconda3/include/qt/QtCore -I. -I../../anaconda3/mkspecs/linux-g++
QMAKE         = /home/mario/anaconda3/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
QINSTALL      = /home/mario/anaconda3/bin/qmake -install qinstall
QINSTALL_PROGRAM = /home/mario/anaconda3/bin/qmake -install qinstall -exe
DEL_FILE      = rm -f
SYMLINK       = ln -f -s
DEL_DIR       = rmdir
MOVE          = mv -f
TAR           = tar -cf
COMPRESS      = gzip -9f
DISTNAME      = QTexample1.0.0
DISTDIR = /home/mario/Tools/QTexample/.tmp/QTexample1.0.0
LINK          = g++
LFLAGS        = -Wl,-O1 -Wl,-rpath,/home/mario/anaconda3/lib
LIBS          = $(SUBLIBS) -L/home/mario/anaconda3/lib -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread 
AR            = ar cqs
RANLIB        = 
SED           = sed
STRIP         = strip

####### Output directory

OBJECTS_DIR   = ./

####### Files

SOURCES       = main.cpp 
OBJECTS       = main.o
DIST          = ../../anaconda3/mkspecs/features/spec_pre.prf \
        ../[...]

        QTexample.pro  main.cpp
QMAKE_TARGET  = QTexample
DESTDIR       = 
TARGET        = QTexample


first: all
####### Build rules

$(TARGET):  $(OBJECTS)  
    $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)

Makefile: QTexample.pro ../../anaconda3/mkspecs/linux-g++/qmake.conf ../../anaconda3/mkspecs/features/spec_pre.prf \[...]

qmake: FORCE
    @$(QMAKE) -o Makefile QTexample.pro

qmake_all: FORCE


all: Makefile $(TARGET)

dist: distdir FORCE
    (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)

distdir: FORCE
    @test -d $(DISTDIR) || mkdir -p $(DISTDIR)
    $(COPY_FILE) --parents $(DIST) $(DISTDIR)/
    $(COPY_FILE) --parents ../../anaconda3/mkspecs/features/data/dummy.cpp $(DISTDIR)/
    $(COPY_FILE) --parents main.cpp $(DISTDIR)/


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


distclean: clean 
    -$(DEL_FILE) $(TARGET) 
    -$(DEL_FILE) .qmake.stash
    -$(DEL_FILE) Makefile


####### Sub-libraries

mocclean: compiler_moc_header_clean compiler_moc_source_clean

mocables: compiler_moc_header_make_all compiler_moc_source_make_all

check: first

benchmark: first

compiler_rcc_make_all:
compiler_rcc_clean:
compiler_moc_predefs_make_all: moc_predefs.h
compiler_moc_predefs_clean:
    -$(DEL_FILE) moc_predefs.h
moc_predefs.h: ../../anaconda3/mkspecs/features/data/dummy.cpp
    g++ -pipe -O2 -Wall -W -dM -E -o moc_predefs.h ../../anaconda3/mkspecs/features/data/dummy.cpp

compiler_moc_header_make_all:
compiler_moc_header_clean:
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all:
compiler_uic_clean:
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: compiler_moc_predefs_clean 

####### Compile

main.o: main.cpp ../../anaconda3/include/qt/QtWidgets/qapplication.h \[...]

    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
    #####
    main: $(OBJS) $(CXX) $(LDFLAGS) -o main $(OBJS) $(LDLIBS)
####### Install

install:  FORCE

uninstall:  FORCE

FORCE:


  • `.o` files are not executable. You should just have a `main` file that is the actual binary. If not your make file isn't doing the final step of converting to `main.o` to `main` – NathanOliver Oct 09 '19 at 12:45
  • It seems to be binary, but how do I run the script then? Shall I find a way to convert `main.o` to `main`? – Mario Bernardi Oct 09 '19 at 12:48
  • See [this](https://stackoverflow.com/a/2481326/4342498). You should have a line somewhere in your make file like `main: $(OBJS) $(CXX) $(LDFLAGS) -o main $(OBJS) $(LDLIBS)` which tells the compilers to take the .o files and make an executable from them. – NathanOliver Oct 09 '19 at 12:52
  • It seems to be missing, do you think simply generating the Makefile by `qmake -project` `qmake` Is somehow a flawed proceure? – Mario Bernardi Oct 09 '19 at 12:56
  • Sorry but I can't help you there. I don't know qmake. Hopefully someone else can help you with that. It might be helpful if you could post your makefile. – NathanOliver Oct 09 '19 at 12:59
  • Thank you very much!! – Mario Bernardi Oct 09 '19 at 12:59
  • Nathan I actually solved with your comments! I was doing it allright..simply the executable was named differently for some reason..and I went mad. you opened my eyes thanks a lot! – Mario Bernardi Oct 09 '19 at 13:24
  • That's good to hear. Glad to have been of help. Since this is solved you might as well delete the question so it doesn't get down voted or closed on you. – NathanOliver Oct 09 '19 at 13:25

0 Answers0