1 c/c++ compiling @ um/mcsr last modified: september 3, 2008

33
1 C/C++ Compiling C/C++ Compiling @ UM/MCSR @ UM/MCSR Last modified: September 3, 2008

Upload: elvin-berry

Post on 23-Dec-2015

220 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

1

C/C++ C/C++ CompilingCompiling

@ UM/MCSR@ UM/MCSR

Last modified: September 3, 2008

Page 2: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

2

OutlineOutline• Surfing www.mcsr.olemiss.edu website• Logging into the system via ssh• Brief History of C/C++ languages• Basic Structure and Syntax of C/C++ Programs• A quick glance on PICO editor• A detailed look on compilers and compiling

commands• How to run a compiled file• Application of C/C++ Compiling

Page 3: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

3

Logging into the system Logging into the system using ssh using ssh

• Logging into the system from Windows:– Start the secure shell client:

Start->Programs->SSH Secure Shell->Secure Shell Client – Connect to willow:

From the secure shell window, click Quick Connect. Then, from the Connect to Remote Host pop-up window, enter: Hostname : HostNameUser Name : UserNameClick Connect.

• Logging into the system from Unix:– Start the Terminal:

Finder Utilities Terminal – Type the following command:

ssh UserName@HostNameEnter your password

• If you are a windows user and you want to download ssh:Go to MCSR Web at www.mcsr.olemiss.edu and click on the Software Tab, followed by the Secure Shell link.

• If you are a Unix, Linux, or MAC user, ssh will come with the operating system

Page 4: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

4

A Brief History of C A Brief History of C languagelanguage

• In the early 1970s, Dennis Ritchie of Bell Laboratories was engaged in a project to develop new operating system. C programming language was then developed.

• In the early 1980's, also at Bell Laboratories, another C++ language was created. This new language was developed by Bjarne Stroustrup and was called C++ which was designed with OOP (Object Oriented Programming) features added to C without significantly changing the C component.

Page 5: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

5

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

Page 6: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

6

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

Comments are set between /* and */

Page 7: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

7

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

The C pre-processor replaces this directivewith the contents of the stdio.h header file from the standard C library.

Page 8: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

8

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

Every C program must have one main function.

Page 9: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

9

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

Each variable must be explicitly defined as a specific type.

Page 10: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

10

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

The stdio library defines the printf() function for creating output.

Page 11: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

11

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

The stdio library defines the printf() function for creating output.

\n is the newline character

Page 12: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

12

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

The stdio library defines the scanf() function for capturing input.

Page 13: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

13

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

%d tells scanf() to interpret the input as a decimal value

Page 14: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

14

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

The = operator is used for assignment.

The * operator is used for multiplication.

Page 15: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

15

A Simple C ProgramA Simple C Program/* Take a number multiply it by 10 and display it */

#include <stdio.h>

main(){

int number, result; printf("Type in a number \n");scanf("%d", &number);result = number *10;printf("The number multiplied by 10 equals %d\n", result);

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

%d tells printf() to treat the value of the result variable as a decimal nbr.

Page 16: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

16

Simple C++ ProgramSimple C++ Program/* Take a number multiply it by 10 and display it */

#include <iostream>

int main(){

int number, result; std::cout<<"Type in a number “<< std::endl;std::cin>>number;result = number *10;std::cout<<"The number multiplied by 10 equals “<<result;

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

C++ pre-processor directives include different versions of the standard library packages.

Page 17: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

17

Simple C++ ProgramSimple C++ Program/* Take a number multiply it by 10 and display it */

#include <iostream>

int main(){

int number, result; std::cout <<"Type in a number “<< std::endl;std::cin >>number;result = number *10;std::cout<<"The number multiplied by 10 equals “<<result;

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

std is an object which you can send messages to—messages such as:

cout, cin, & endl.

Page 18: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

18

Simple C++ ProgramSimple C++ Program/* Take a number multiply it by 10 and display it */

#include <iostream>using namespace std;

int main(){

int number, result; cout <<"Type in a number “ << endl;cin>>number;result = number *10;cout<<"The number multiplied by 10 equals “ <<result;

}

Sample Program OutputType in a number23The number multiplied by 10 equals 230

You can use an object’s namespace, to keep from having to specify the name of the object each time you send it a message.

Page 19: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

19

The PICO EditorThe PICO Editor• General Command

– Write editor contents to a file [Ctrl] o– Save the file and exit pico [Ctrl] x– Spell Check [Ctrl] t– Justify the text [Ctrl] j

• Moving around in your file– Move one character to the right [Ctrl] f or right arrow key– Move one character to the left [Ctrl] b or left arrow key– Move up one line [Ctrl] p or up arrow key– Move down one line [Ctrl] n or down arrow key

Page 20: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

20

C/C++ source files suffixesC/C++ source files suffixes

• .cpp, .cc, .c suffixes are used for C++ programs that are to be preprocessed, compiled and assembled

• .c for C programs that are to be processed, compiled and assembled

• .h or preprocessor (header) files

Page 21: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

21

How to run compiled filesHow to run compiled files• The compiling commands create an

executable file known as a.out unless specified otherwise.

• To execute your program, type ./a.out and press Enter.

Page 22: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

22

Compilation DetailsCompilation Details

object.h

object.cpp

main.cpp

object.s

main.s

object.o

main.o

Output

Source code Assembly Machine Code

Page 23: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

23

A detailed look into Compilers A detailed look into Compilers and Compiling commandsand Compiling commands

• C/C++ Compilers at UM/MCSR:– Intel C++ Compiler on redwood– MIPS C, MIPSpro C, and MIPSpro C++

version 7.4 compilers on Origin 2800 sweetgum

– Portland Group, GNU, and MPICH Compilers on Beowulf Cluster mimosa

– GNU C Compiler and SUN STUDIO 8 C/C++ Compilers on willow

Page 24: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

24

Loading the appropriate Intel Loading the appropriate Intel Compiler Module Compiler Module

• Several versions/builds of Intel compilers are available on redwood. To compile, you must first pick which compiler version module you want to load, then load it. Before you can use the module command, you must source the correct setup file for your shell.

– . /usr/share/modules/init/sh (if using ssh) (There should be a space between . and /opt)

• Then you use the module command: – module list (to see if any other versions of compiler modules are loaded) – module purge (to unload any other versions of compiler modules) – module list (to verify that other versions were successfully unloaded) – module avail (to see what versions of compiler modules are available to load)

• For example, to load the latest 10.1 version of the C Compilers: – module load c101– module list

• These are the names of the modules and the compiler versions they correspond to:

– intel-compilers.7.1.037 for c 7.1 – intel-compilers.8.0.042 for c 8.0 – intel-compilers.8.0.046 for c 8.0 – intel-compilers.9.0.027 for c 9.0 – intel-compilers.9.1.046 for c 9.1– intel-compilers.cc.10.1.017 for c 10.1

Page 25: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

25

Intel C++ Compiler on Intel C++ Compiler on redwoodredwood

• Intel C/C++ Compilers(7.1, 8.0, 9.0, 9.1 & 10.0)– Before using the C/C++ Compiler on redwood,

you must first load the appropriate Intel compiler module.

– Then, to compile:• icc example.c if using the 8.0 or later

compiler• ecc example.c if using the 7.1 compiler.

• With Intel compilers, the invocation syntax is the same regardless of whether your source file is C or C++.

Page 26: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

26

Exercise 1: Intel Compiler on Exercise 1: Intel Compiler on RedwoodRedwood

1. If you have an account on redwood, login to it. 2. Copy the two example source files from /usr/local/examples/c to your

working directory:A. cd 1 (if using a common class account, cd to your numbered subdirectory)B. cp /usr/local/examples/c/hello.c ./hello.cC. cp /usr/local/examples/c/addtwo.cpp ./addtwo.cpp

3. Source the appropriate modules environment script for your shell:C. . /usr/share/modules/init/bash

4. Use “module avail” to see which modules are available5. Load one of the 10.X modules

A. module load c101B. module list

6. Compile/execute the hello.c and addtwo.cppA. icc hello.cB. ./a.outC. icc addtwo.cppD. ./a.out

7. Clear all loaded modulesA. module listB. module clearC. module list

Page 27: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

27

SweetgumSweetgum and and MimosaMimosa

• Sweetgum: MIPSPro 7.4 Compilers, version 7.4– To compile with cc/CC on sweetgum, enter:

• CC example.c

– To find out more about compilers, enter:• man cc OR man CC

• Mimosa: PGI CDK 7.2 Compilers– To compile with the C/C++ compilers, enter:

• /usr/local/apps/pgi-7.2/linux86/7.2/bin/pgCC example.c

Page 28: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

28

GNU C Compiler and GNU C Compiler and SUN STUDIO SUN STUDIO 8 C/C++ Compilers8 C/C++ Compilers on on willowwillow

• gcc file1.c command is used to compile and link a C program on willow

• g++ file1.c command is used to compile and link a C++ program on willow

Page 29: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

29

Willow & Common Compiler Willow & Common Compiler FlagsFlags

• Sun Studio C/C++ Compilers, Version 5.5:– To compile with C/C++, enter:

• cc example.c (C)• CC example.c (C++)

– Compilers located in /ptmp/studio8/SUNWspro/bin

• GNU C/C++ Compilers, Version 3.3.2– To compile with C/C++, enter:

• gcc example.c (C)• g++ example.c (C++)

– Compilers located in /usr/local/bin

• Use which to see which compiler version is being found.– which cc– which CC

• If there are no compilation errors this creates an executable file called a.out. To execute the C/C++ program, enter: ./a.out.

Page 30: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

30

Exercise 2: Compile C/C++ on Exercise 2: Compile C/C++ on willowwillow

1. Log in to willow using the account: student2. Change to your numbered working directory:

– cd 1

3. Compile/execute hello.c using GNU C compiler– gcc hello.c– ./a.out

4. Compile/execute simpleB.cpp using Sun’s C++ – CC simpleB.cpp– ./a.out

5. Try to compile hello.c using Sun’s C compiler– cc hello.c

Page 31: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

31

Example C/C++ Flags Example C/C++ Flags cc <flag> <filename.c>

-c Compile or assemble the source files, but do not link.

-S Stop after the stage of compilation proper

-E Stop after the preprocessing stage

-o newFilename Name executable something besides a.out

-V Show the compiler version (SUN)-v Show the compiler version (GNU)

Page 32: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

32

Exercise 3: Compiler OptionsExercise 3: Compiler Options

1. Compile/execute hello.c using GNU C compiler, and name the executable file helloc.exe

– gcc hello.c –o helloc.exe– ./helloc.exe

2. Determine what version of the GNU compilers are installed

– gcc -v– g++ -v

3. Determine version of installed Sun’s compiler– CC –V

– /ptmp/studio8/SUNWspro/bin/cc -V

Page 33: 1 C/C++ Compiling @ UM/MCSR Last modified: September 3, 2008

33

Frequently Asked ?’s on C/C++ Frequently Asked ?’s on C/C++ WillowWillow

1. How can I compile one or more C/C++ source files into object files without yet linking into an executable program?

2. How can I ensure the compiler will find a C/C++ header file referenced by my program?

3. How can I ensure the compiler will find a pre-compiled module referenced by my program but residing in a system- or user-defined archive library?

4. How can I add my own module to a library archive for others on the system to re-use?

Answers here (or in Advanced C/C++ Compiling Unix Camp)http://www.mcsr.olemiss.edu/appssubpage.php?pagename=cwillow.inc