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

advertisement
C/C++
Compiling
@ UM/MCSR
Last modified: September 3, 2008
1
Outline
•
•
•
•
•
•
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
2
Logging into the system
using ssh
•
Logging into the system from Windows:
–
–
•
Logging into the system from Unix:
–
–
•
•
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
: HostName
User Name
: UserName
Click Connect.
Start the Terminal:
Finder Utilities  Terminal
Type the following command:
ssh UserName@HostName
Enter 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
3
A Brief History of C
language
• 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.
4
A 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 Output
Type in a number
23
The number multiplied by 10 equals 230
5
A Simple C Program
/* Take a number multiply it by 10 and display it */
#include <stdio.h>
Comments are set between /* and */
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 Output
Type in a number
23
The number multiplied by 10 equals 230
6
A Simple C Program
/* Take a number multiply it by 10 and display it */
#include <stdio.h>
The C pre-processor replaces this directive
with the contents of the stdio.h header file
from the standard C library.
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 Output
Type in a number
23
The number multiplied by 10 equals 230
7
A Simple C Program
/* Take a number multiply it by 10 and display it */
#include <stdio.h>
Every C program must have one main
function.
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 Output
Type in a number
23
The number multiplied by 10 equals 230
8
A Simple C Program
/* Take a number multiply it by 10 and display it */
#include <stdio.h>
main()
Each variable must be explicitly defined as
{
a specific type.
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 Output
Type in a number
23
The number multiplied by 10 equals 230
9
A Simple C Program
/* Take a number multiply it by 10 and display it */
#include <stdio.h>
main()
{
The stdio library defines the
int number, result;
printf("Type in a number \n"); printf() function for creating output.
scanf("%d", &number);
result = number *10;
printf("The number multiplied by 10 equals %d\n", result);
}
Sample Program Output
Type in a number
23
The number multiplied by 10 equals 230
10
A Simple C Program
/* Take a number multiply it by 10 and display it */
#include <stdio.h>
main()
{
The stdio library defines the
int number, result;
printf("Type in a number \n"); printf() function for creating output.
scanf("%d", &number);
\n is the newline character
result = number *10;
printf("The number multiplied by 10 equals %d\n", result);
}
Sample Program Output
Type in a number
23
The number multiplied by 10 equals 230
11
A Simple C Program
/* Take a number multiply it by 10 and display it */
#include <stdio.h>
The stdio library defines the
main()
scanf() function for capturing input.
{
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 Output
Type in a number
23
The number multiplied by 10 equals 230
12
A 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"); %d tells scanf() to interpret the
input as a decimal value
scanf("%d", &number);
result = number *10;
printf("The number multiplied by 10 equals %d\n", result);
}
Sample Program Output
Type in a number
23
The number multiplied by 10 equals 230
13
A Simple C Program
/* Take a number multiply it by 10 and display it */
#include <stdio.h>
The = operator is used for
main()
assignment.
{
int number, result;
printf("Type in a number \n"); The * operator is used for
scanf("%d", &number);
multiplication.
result = number *10;
printf("The number multiplied by 10 equals %d\n", result);
}
Sample Program Output
Type in a number
23
The number multiplied by 10 equals 230
14
A 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 Output
Type in a number
23
The number multiplied by 10 equals 230
%d tells printf() to treat the value of
the result variable as a decimal nbr.
15
Simple C++ Program
/* Take a number multiply it by 10 and display it */
#include <iostream>
C++ pre-processor directives include
different versions of the standard
library packages.
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 Output
Type in a number
23
The number multiplied by 10 equals 230
16
Simple C++ Program
/* Take a number multiply it by 10 and display it */
#include <iostream>
std is an object which you can send
messages to—messages such as:
cout, cin, & endl.
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 Output
Type in a number
23
The number multiplied by 10 equals 230
17
Simple C++ Program
/* Take a number multiply it by 10 and display it */
#include <iostream>
using namespace std;
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.
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 Output
Type in a number
23
The number multiplied by 10 equals 230
18
The PICO Editor
• General Command
–
–
–
–
Write editor contents to a file
Save the file and exit pico
Spell Check
Justify the text
[Ctrl]
[Ctrl]
[Ctrl]
[Ctrl]
o
x
t
j
[Ctrl]
[Ctrl]
[Ctrl]
[Ctrl]
f or right arrow key
b or left arrow key
p or up arrow key
n or down arrow key
• Moving around in your file
–
–
–
–
Move
Move
Move
Move
one character to the right
one character to the left
up one line
down one line
19
C/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
20
How 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.
21
Compilation Details
Source code
Assembly
Machine Code
object.cpp
object.s
object.o
object.h
Output
main.s
main.o
main.cpp
22
A detailed look into Compilers
and 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
23
Loading the appropriate Intel
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:
•
For example, to load the latest 10.1 version of the C Compilers:
•
These are the names of the modules and the compiler versions they
correspond to:
–
–
–
–
module
module
module
module
list (to see if any other versions of compiler modules are loaded)
purge (to unload any other versions of compiler modules)
list (to verify that other versions were successfully unloaded)
avail (to see what versions of compiler modules are available to load)
– module load c101
– module list
–
–
–
–
–
–
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
24
Intel C++ Compiler on redwood
• 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++.
25
Exercise 1: Intel Compiler on
Redwood
1.
2.
3.
4.
5.
6.
7.
If you have an account on redwood, login to it.
Copy the two example source files from /usr/local/examples/c to your
working directory:
A.
B.
C.
cd 1 (if using a common class account, cd to your numbered subdirectory)
cp /usr/local/examples/c/hello.c ./hello.c
cp /usr/local/examples/c/addtwo.cpp ./addtwo.cpp
C.
. /usr/share/modules/init/bash
A.
B.
module load c101
module list
A.
B.
C.
D.
icc hello.c
./a.out
icc addtwo.cpp
./a.out
A.
B.
C.
module list
module clear
module list
Source the appropriate modules environment script for your shell:
Use “module avail” to see which modules are available
Load one of the 10.X modules
Compile/execute the hello.c and addtwo.cpp
Clear all loaded modules
26
Sweetgum and Mimosa
• 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
27
GNU C Compiler and SUN STUDIO
8 C/C++ Compilers on willow
• 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
28
Willow & Common Compiler
Flags
• 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.
29
Exercise 2: Compile C/C++ on
willow
1.
2.
Log in to willow using the account: student
Change to your numbered working directory:
–
3.
Compile/execute hello.c using GNU C compiler
–
–
4.
gcc hello.c
./a.out
Compile/execute simpleB.cpp using Sun’s C++
–
–
5.
cd 1
CC simpleB.cpp
./a.out
Try to compile hello.c using Sun’s C compiler
–
cc hello.c
30
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)
31
Exercise 3: Compiler Options
1.
Compile/execute hello.c using GNU C compiler,
and name the executable file helloc.exe
–
–
2.
Determine what version of the GNU compilers
are installed
–
–
3.
gcc hello.c –o helloc.exe
./helloc.exe
gcc -v
g++ -v
Determine version of installed Sun’s compiler
–
CC –V
–
/ptmp/studio8/SUNWspro/bin/cc -V
32
Frequently Asked ?’s on C/C++
Willow
1.
2.
3.
4.
How can I compile one or more C/C++ source
files into object files without yet linking into an
executable program?
How can I ensure the compiler will find a
C/C++ header file referenced by my program?
How can I ensure the compiler will find a precompiled module referenced by my program
but residing in a system- or user-defined
archive library?
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
33
Download