Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linking C++ code with 'gcc' (without g++)

Tags:

c++

gcc

linker

Hi all: quick question: I'm in a situation where it would be useful to generate my C++ executable using only 'gcc' (without g++). Reason for this is that I have to submit the code to an automatic submission server which doesn't recognize the 'g++' (or 'c++', for that matter) command.

In my experiments, while I'm compiling gcc works well. Problem is, when I try to link the generated object files it gets messed up. Now, based on what I understood from the gcc man page (I may be way off, so tell me if I am), g++ is basically gcc, but it links the C++ library.

If this is true, how can I (if possible) explicitly link the C++ library without using the g++ (or c++) command?

EDIT: I'm adding the makefile to better illustrate the problem:

COMPILER = gcc CFLAGS = -Wall -g -x c++  # MODULE COMPILATION model: modules/model.h modules/sources/model.cpp     $(COMPILER) $(CFLAGS) -c modules/sources/model.cpp -o obj/model.o  algorithms: modules/algorithms.h modules/sources/algorithms.cpp     $(COMPILER) $(CFLAGS) -c modules/sources/algorithms.cpp -o obj/algorithms.o  io: modules/io.h modules/sources/io.cpp     $(COMPILER) $(CFLAGS) -c modules/sources/io.cpp -o obj/io.o  stopwatch: modules/stopwatch.h modules/sources/stopwatch.cpp     $(COMPILER) $(CFLAGS) -c modules/sources/stopwatch.cpp -o obj/stopwatch.o  # EXECUTABLE GENERATION exe: model algorithms io stopwatch     $(COMPILER) $(CFLAGS) main.cpp obj/model.o obj/algorithms.o obj/io.o obj/stopwatch.o -o bin/process  # DEFAULT TEST CASE run: exe     ./bin/process -i data/nasa_small.log -a data/nasa_small.access -s data/nasa_small.stack  # CLEANING ROUTINE clean:     rm -f obj/* 
like image 232
Rafael Almeida Avatar asked Jun 16 '09 13:06

Rafael Almeida


People also ask

Should I use GCC or G ++ for C?

gcc is used to compile C program while g++ is used to compile C++ program. Since, a C program can also be compile complied through g++, because it is the extended or we can say advance compiler for C programming language.

Can GCC be used for C?

GCC, formerly for "GNU C Compiler", has grown over times to support many languages such as C ( gcc ), C++ ( g++ ), Objective-C, Objective-C++, Java ( gcj ), Fortran ( gfortran ), Ada ( gnat ), Go ( gccgo ), OpenMP, Cilk Plus, and OpenAcc. It is now referred to as "GNU Compiler Collection".

Can you use g ++ to compile C?

g++ also has additional macros. So you can compile C code with g++ and in fact mix both C and C++ code. Finally, the executable size may also changes based on the compiler.


2 Answers

You can link the standard c++ library with the -l flag to gcc:

gcc cplusplus.o -lstdc++ -o myexe 
like image 81
CB Bailey Avatar answered Sep 21 '22 05:09

CB Bailey


If you run g++ with the "-v" option, it will show what command and options it uses. You should be able to deduce the correct gcc command line from there.

like image 22
JesperE Avatar answered Sep 21 '22 05:09

JesperE