g++ output: file not recognized: File format not recognized
Solution 1
This is wrong:
g++ -c src/CNumber.cpp src/CNumber.h -o src/CNumber.o
You shouldn't "compile" .h files. Doing so will create precompiled header files, which are not used to create an executable. The above should simply be
g++ -c src/CNumber.cpp -o src/CNumber.o
Similar for compiling the other .cpp files
Solution 2
I ran into this error in building something - it turned out to be due to a previous build failing while compiling a source file to an .o file - that .o file was incomplete or corrupted, so when I tried another build it gave this error on that file.
The solution was to just delete the .o file (or run make clean
, if you have a makefile with that target).
RuinerCZ
Updated on December 26, 2020Comments
-
RuinerCZ over 3 years
I am trying to build program with multiple files for the first time. I have never had any problem with compliling program with main.cpp only. With following commands, this is the result:
$ g++ -c src/CNumber.cpp src/CNumber.h -o src/CNumber.o $ g++ -c src/CExprPart.cpp src/CExprPart.h -o src/CExprPart.o $ g++ -c src/CExpr.cpp src/CExpr.h -o src/CExpr.o $ g++ -c src/main.cpp -o src/main.o $ g++ src/CNumber.o src/CExprPart.o src/CExpr.o src/main.o -o execprogram src/CNumber.o: file not recognized: File format not recognized collect2: error: ld returned 1 exit status
What could cause such error and what should I do with it? Using Linux Mint with gcc (Ubuntu/Linaro 4.7.2-2ubuntu1). Thank you
-
RuinerCZ almost 11 yearsThanks for reply. It builds fine. If I use just ./myprogram instead of your second line, I get correct output (hello world)
-
RuinerCZ almost 11 yearsSo, as far I understand it, builder is able to find these header files by itself due to #include directives, right?
-
nos almost 11 years@user2489350 Yes. Depending on where they are located. You can specify additional paths to search for #include files with the -I argument to gcc/g++
-
Pdksock almost 7 yearsSolved my issue as well.