MATH 676 Finite element methods in scientifjc computing Wolfgang - - PowerPoint PPT Presentation

math 676 finite element methods in scientifjc computing
SMART_READER_LITE
LIVE PREVIEW

MATH 676 Finite element methods in scientifjc computing Wolfgang - - PowerPoint PPT Presentation

MATH 676 Finite element methods in scientifjc computing Wolfgang Bangerth, T exas A&M University http://www.dealii.org/ Wolfgang Bangerth Lecture 2.91: A (very brief) introduction to Linux Part 2: Compiling programs


slide-1
SLIDE 1

http://www.dealii.org/ Wolfgang Bangerth

MATH 676 – Finite element methods in scientifjc computing

Wolfgang Bangerth, T exas A&M University

slide-2
SLIDE 2

http://www.dealii.org/ Wolfgang Bangerth

Lecture 2.91: A (very brief) introduction to Linux Part 2: Compiling programs

slide-3
SLIDE 3

http://www.dealii.org/ Wolfgang Bangerth

Compiling, linking, etc.

Building an application is a 2-step process:

  • “Compile” every .cc fjle into a .o fjle:

c++ -c a.cc -o a.o c++ -c b.cc -o b.o

  • “Link” all .o fjles into one executable:

c++ a.o b.o -o myprog The details are easier to explain using an example...

slide-4
SLIDE 4

http://www.dealii.org/ Wolfgang Bangerth

What could go wrong?

Both compiling and linking can produce errors:

  • Compiler errors:

– Your code does not follow the C++ “syntax” – You reference a variable that has not been “declared” – You call a function that has not been “declared”

  • Linker errors:

– You call a function that has been “declared” but not “implemented”

  • Important: When fjguring out what's wrong, need to

know which “phase” you're in!

slide-5
SLIDE 5

http://www.dealii.org/ Wolfgang Bangerth

What could go wrong?

Notes on compiler/linker errors:

  • Errors often “cascade”

→ start at the top (i.e., the fjrst error message)

  • If there are many error messages, use the command

c++ -c a.cc -o a.o 2>&1 | less Here, '2>&1' “redirects” stderr to stdout, so that it can serve as input to 'less'.

  • Linker errors can only happen once everything has been

compiled.

slide-6
SLIDE 6

http://www.dealii.org/ Wolfgang Bangerth

Automating compilation/linking

Building an application is a 2-step process:

  • “Compile” every .cc fjle into a .o fjle:

c++ -c a.cc -o a.o c++ -c b.cc -o b.o

  • “Link” all .o fjles into one executable:

c++ a.o b.o -o myprog Problem: This is (i) cumbersome to do every time, and (ii) diffjcult to get right with “dependencies”. Solution: Write rules for a program called “make”, then say make myprog

slide-7
SLIDE 7

http://www.dealii.org/ Wolfgang Bangerth

Automating compilation/linking

Makefjles contain:

  • “targets”

– what should be done

  • “dependencies”

– what does a target depend on

  • “rules”

– how should a target be created

  • Variables and generic rules to make writing rules easier

Again: Simpler to to see using a concrete example!

slide-8
SLIDE 8

http://www.dealii.org/ Wolfgang Bangerth

Automating compilation/linking

Makefjles contain:

  • “targets”

– what should be done

  • “dependencies”

– what does a target depend on

  • “rules”

– how should a target be created Problems:

  • Simple Makefjles are easy to write
  • But quickly become complex and unreadable. Archaic

syntax does not help (“make” was invented in 1976).

  • Not platform independent
  • Not meant as input for tools other than “make”
slide-9
SLIDE 9

http://www.dealii.org/ Wolfgang Bangerth

Automating compilation/linking

Makefjles contain:

  • “targets”

– what should be done

  • “dependencies”

– what does a target depend on

  • “rules”

– how should a target be created Problems:

Solutions: There are now tools/programming languages that describe targets, dependencies, and rules at a higher

  • level. They then create Makefjles or other output.

Example: autoconf/automake, cmake

slide-10
SLIDE 10

http://www.dealii.org/ Wolfgang Bangerth

MATH 676 – Finite element methods in scientifjc computing

Wolfgang Bangerth, T exas A&M University