Installation Troubleshooting

From Free Pascal wiki

Installation Troubleshooting

These hints should (hopefully) be applicable across platforms; please adjust paths etc. according to your platform. Also, problems and solutions might be mentioned in the Lazarus_Faq.

Isolating the component

There may be multiple problems when installing Free Pascal and Lazarus. If you have problems with starting Lazarus or compiling with it, first make sure your underlying FPC installation works, e.g. by trying to compile a simple example program.

Location of installed components

On Linux/Unix/OSX, package/distribution provided installations will often install FPC in /bin or /usr/bin, with the libraries in /lib or /usr/lib, and probably the configuration in /etc/fpc.cfg Source (Subversion) downloads often install in /usr/local/bin (libraries in /usr/local/lib).

Missing or corrupt fpc.cfg file

The fpc.cfg file is the configuration file for FPC. For windows, it can normally be found in the fpc compiler's executable directory. On Unix/Linux/OSX, it is first searched in /etc/fpc.cfg, then [where?].

Only some problems that often occur are covered. Please see the Free Pascal User's guide, e.g. chapter Compiler usage/configuration file for more details, including the search order for fpc.cfg

If it is not present, FPC will in general not compile your programs properly.

Create fpc.cfg automatically

You can try to create fpc.cfg via a tool:

rem Change to the FPC executable directory, adjust to taste
cd /d C:\freepascal\fpc\2.4.5\bin\i386-win32
rem Create fpc.cfg; basepath is the "root" of your fpc tree
fpcmkcfg -d basepath=C:\freepascal\fpc\2.4.5 -o .\fpc.cfg
Note-icon.png

Note: earlier instructions had \bin\i386-win32 appended to the basepath. This is not needed since at least FPC 2.4.4.

Create fpc.cfg manually

If the above doesn't work for you, you can copy/paste the code below to a new file named fpc.cfg to your fpc executable directory (or ~/.fpc.cfg or other location). Modify the paths so they match your situation.

$FPCVERSION is used to automatically determine the version of FPC being used for the compile. Using this variable allows this single fpc.cfg to be used with multiple fpc versions that have the same path structure making it easier to maintain multiple FPC installs.

#
# Config file generated by fpcmkcfg on 24/12/2010 - 18:17:42
# Example fpc.cfg for Free Pascal Compiler
#

# ----------------------
# Defines (preprocessor)
# ----------------------

#
# nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed
#
# -d is the same as #DEFINE
# -u is the same as #UNDEF
#

#
# Some examples (for switches see below, and the -? helppages)
#
# Try compiling with the -dRELEASE or -dDEBUG on the commandline
#

# For a release compile with optimizes and strip debuginfo
#IFDEF RELEASE
-O2
-Xs
#WRITE Compiling Release Version
#ENDIF

# For a debug version compile with debuginfo and all codegeneration checks on
#IFDEF DEBUG
-glh
-Crtoi
#WRITE Compiling Debug Version
#ENDIF

# ----------------
# Parsing switches
# ----------------

# Pascal language mode
#      -Mfpc      free pascal dialect (default)
#      -Mobjfpc   switch some Delphi 2 extensions on
#      -Mdelphi   tries to be Delphi compatible
#      -Mtp       tries to be TP/BP 7.0 compatible
#      -Mgpc      tries to be gpc compatible
#      -Mmacpas   tries to be compatible to the macintosh pascal dialects
#
# Turn on Object Pascal extensions by default
#-Mobjfpc

# Assembler reader mode
#      -Rdefault  use default assembler
#      -Ratt      read AT&T style assembler
#      -Rintel    read Intel style assembler
#
# All assembler blocks are AT&T styled by default
#-Ratt

# Semantic checking
#      -S2        same as -Mobjfpc
#      -Sc        supports operators like C (*=,+=,/= and -=)
#      -Sa        include assertion code.
#      -Sd        same as -Mdelphi
#      -Se<x>     compiler stops after the <x> errors (default is 1)
#      -Sg        allow LABEL and GOTO
#      -Sh        Use ansistrings
#      -Si        support C++ styled INLINE
#      -SI<x>     set interface style to <x>
#         -SIcomCOM compatible interface (default)
#         -SIcorbaCORBA compatible interface
#      -Sm        support macros like C (global)
#      -So        same as -Mtp
#      -Sp        same as -Mgpc
#      -Ss        constructor name must be init (destructor must be done)
#
# Allow goto, inline, C-operators, C-vars
-Sgic

# ---------------
# Code generation
# ---------------

# Uncomment the next line if you always want static/dynamic units by default
# (can be overruled with -CD, -CS at the commandline)
#-CS
#-CD

# Set the default heapsize to 8Mb
#-Ch8000000

# Set default codegeneration checks (iocheck, overflow, range, stack)
#-Ci
#-Co
#-Cr
#-Ct

# Optimizer switches for i386 compiler
# -Os        generate smaller code
# -O1        level 1 optimizations (quick optimizations)
# -O2        level 2 optimizations (-O1 + slower optimizations)
# -O3        level 3 optimizations (same as -O2u)
# -Oa=N      set alignment to N
# -OoX       switch on optimalization X. 
# -OoNOX     switch off optimalization X.
#               X is one of REGVAR UNCERTAIN STACKFRAME PEEPHOLE ASMCSE LOOPUNROLL
# -OpCPU     set target processor.
#             CPU is one of 386, PENTIUM, PENTIUM2, PENTIUM3, PENTIUM4, PENTIUMM 


# -----------------------
# Set Filenames and Paths
# -----------------------

# Both slashes and backslashes are allowed in paths

# path to the messagefile, not necessary anymore but can be used to override
# the default language
#-FrC:\freepascal\fpc\$FPCVERSION/msg/errore.msg
#-FrC:\freepascal\fpc\$FPCVERSION/msg/errorn.msg
#-FrC:\freepascal\fpc\$FPCVERSION/msg/errores.msg
#-FrC:\freepascal\fpc\$FPCVERSION/msg/errord.msg
#-FrC:\freepascal\fpc\$FPCVERSION/msg/errorr.msg

#IFDEF FPCAPACHE_1_13
-FuC:\freepascal\fpc\$FPCVERSION/units/$FPCTARGET/httpd13/
#ELSE
#IFDEF FPCAPACHE_2_0
-FuC:\freepascal\fpc\$FPCVERSION/units/$FPCTARGET/httpd20
#ELSE
-FuC:\freepascal\fpc\$FPCVERSION/units/$FPCTARGET/httpd22
#ENDIF
#ENDIF

# searchpath for units and other system dependent things
-FuC:\freepascal\fpc\$FPCVERSION/units/$FPCTARGET/
-FuC:\freepascal\fpc\$FPCVERSION/units/$FPCTARGET/*
-FuC:\freepascal\fpc\$FPCVERSION/units/$FPCTARGET/rtl

# path to the gcclib


# searchpath for libraries
#-FlC:\freepascal\fpc\$FPCVERSION/lib
#-Fl/lib;/usr/lib

# searchpath for tools
-FDC:\freepascal\fpc\$FPCVERSION/bin/$FPCTARGET

#IFNDEF CPUI386
#IFNDEF CPUAMD64
#DEFINE NEEDCROSSBINUTILS
#ENDIF
#ENDIF

#IFNDEF Win32
#DEFINE NEEDCROSSBINUTILS
#ENDIF

# binutils prefix for cross compiling
#IFDEF FPC_CROSSCOMPILING
#IFDEF NEEDCROSSBINUTILS
-XP$FPCTARGET-
#ENDIF
#ENDIF


# -------------
# Linking
# -------------

# generate always debugging information for GDB (slows down the compiling
# process)
#      -gc        generate checks for pointers
#      -gd        use dbx
#      -gg        use gsym
#      -gh        use heap trace unit (for memory leak debugging)
#      -gl        use line info unit to show more info for backtraces
#      -gv        generates programs tracable with valgrind
#      -gw        generate dwarf debugging info
#
# Enable debuginfo and use the line info unit by default
#-gl

# always pass an option to the linker
#-k-s

# Always strip debuginfo from the executable
-Xs


# -------------
# Miscellaneous
# -------------

# Write always a nice FPC logo ;)
-l

# Verbosity
#      e : Show errors (default)       d : Show debug info
#      w : Show warnings               u : Show unit info
#      n : Show notes                  t : Show tried/used files
#      h : Show hints                  m : Show defined macros
#      i : Show general info           p : Show compiled procedures
#      l : Show linenumbers            c : Show conditionals
#      a : Show everything             0 : Show nothing (except errors)
#      b : Show all procedure          r : Rhide/GCC compatibility mode
#          declarations if an error    x : Executable info (Win32 only)
#          occurs
#
# Display Info, Warnings, Notes and Hints
-viwn
# If you don't want so much verbosity use
#-vw

Testing and batch file/shortcut usage

You can also explicitly specify a fpc.cfg to use:<bash>fpc -n -@/path/to/fpc.cfg</bash>. Handy for testing, creating shortcuts/shell scripts, having multiple FPC installations etc.

If that does not work, you can try to create fpc.cfg manually: copy over an existing fpc.cfg from a working installation and change the paths.

Mixing FPC versions

If your FPC cannot find its sources/ppu files while fpc.cfg has the right paths, another cause could be that the fpc executable is a different version than the (link to) ppc<architecture> compiler.

When compiling with fpc, fpc starts e.g ppc386 to compile for x86 targets. Please make sure fpc and ppc<architecture> are compiled by the same version/sourced from the same package.

Lazarus can't find sources

There may be a message saying Lazarus can't find the sources; if so, go to the menu at the top and select Environment -> Environment options and insert the name of the directory where you expect to find your lazarus files (eg ~/FreePascal/lazarus), your compiler (e.g. /usr/local/bin/ppc386), the Free Pascal source directory (e.g. /usr/local/lib/fpc/$version/fpc or a directory in your own space e.g. ~/FreePascal/fpc). Then close the dialog and start programming.

Paths in Lazarus options and project options

Note that you can set paths (for compiler, FPC units etc) in the general options settings. Options you specify in Project Options can override these per project. If you experience path-related problems in a project but not in another, you might check if you mistakenly overrode some general options.