*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> intro (3)              



NAME    [Toc]    [Back]

     intro - introduction to the C libraries

SYNOPSIS    [Toc]    [Back]

     cc [flags] file ...  [-llibrary]

DESCRIPTION    [Toc]    [Back]

     The manual pages in section 3 provide an overview of  the  C
library functions,
 their error returns, and other common definitions and
     Most of these functions are available from  the  C  library,
libc.  Other
     libraries, such as the math library, libm, must be indicated
at compile
     time with the -l option of the compiler.

     The various libraries (followed by the loader flag):

     libbfd (-lbfd)
             GNU binary file descriptor library.  Allows applications to operate
  on  object files, regardless of the object file
format.  See
             `info bfd'.

     libc (-lc)
             Standard C library functions.  When using the C compiler cc(1),
             it  is  not  necessary to supply the loader flag -lc
for these functions.
  There are several ``libraries'' or groups of
             included  inside of libc: the standard I/O routines,
database routines,
 bit operators,  string  operators,  character
tests and character
  operators,  DES  encryption routines, storage
             time functions, signal handling, and more.

     libcompat (-lcompat)
             Functions which are obsolete but are  available  for
             with 4.3BSD.  In particular, a number of system call
             provided in previous releases of BSD have  been  included for
             source  code  compatibility.   Use of these routines
should, for the
             most part, be avoided.  The manual  page  entry  for
each compatibility
  routine  indicates  the  proper interface to

     libcrypto (-lcrypto)
             The OpenSSL crypto library.  Implements a  range  of
             algorithms,  providing such functionality as symmetric encryption,
             public key cryptography, and  certificate  handling.

     libcurses (-lcurses)
     libncurses (-lncurses)
     libtermcap (-ltermcap)
     libtermlib (-ltermlib)
             Terminal-independent  screen management routines for
 non-bitmap display terminals.  This implementation is
             ``new curses'' and is a replacement for 4.2BSD classic curses.
             The libraries libncurses, libtermcap, and libtermlib
are all hard
             links  to libcurses.  This is for compatibility purposes only; new
             programs should link with -lcurses.   See  curses(3)

     libcurses++ (-lcurses++)
             C++ interface to ncurses routines.  See curses(3).

     libdes (-ldes)
             Implementation of the DES encryption algorithm.  See

     libedit (-ledit)
             Generic line editing and history functions,  similar
to those
             found in sh(1).  Functions using the libedit library
must be
             linked  with  the  libcurses  library,  i.e.  -ledit
-lcurses.  See

     libevent (-levent)
             Provides  a  mechanism  to execute a function when a
specific event
             on a file descriptor occurs or after  a  given  time
has passed.
             See event(3).

     libform (-lform)
             Terminal-independent  facilities  for composing form
screens on
             character-cell  terminals.   Functions   using   the
libform library
             must  be  linked  with  the  libcurses library, i.e.
-lform -lcurses.
             See form(3).

     libfrtbegin (-lfrtbegin)
     libg2c (-lg2c)
             Support routines for Fortran functions.   These  two
libraries were
             separated  to  allow linking Fortran code with other
languages on
             ELF platforms.  See g77(1).

     libgssapi (-lgssapi)
             The Generic Security Service Application Program Interface
             (GSS-API) provides security services to callers in a

     libiberty (-liberty)
             Collection of subroutines missing in other operating
systems, as
             well  as  the C++ demangler and other functions used
by the GNU

     libkadm5clnt (-lkadm5clnt)
             Kerberos administration client library, for  talking
to a Kerberos
             database.  Clients communicate via the network.

     libkadm5srv (-lkadm5srv)
             Kerberos  administration server library, for talking
to a Kerberos
             database.  Servers talk directly to the database.

     libkeynote (-lkeynote)
             System library for the keynote trust-management system.  Trustmanagement
 systems provide standard, general-purpose
             for specifying  application  security  policies  and
             Functions  using  the  libkeynote  library  must  be
linked with the
             libm and libcrypto  libraries,  i.e.  -lkeynote  -lm
-lcrypto.  See
             keynote(3) and keynote(4).

     libkrb5 (-lkrb5)
     libasn1 (-lasn1)
     libcom_err (-lcom_err)
     libhdb (-lhdb)
     libkafs (-lkafs)
             Kerberos   5   libraries.   The  libraries  libasn1,
libcom_err, libhdb,
             and libkafs are all hard links to libkrb5.  See `info heimdal'.

     libkvm (-lkvm)
             Kernel memory interface library.  Provides a uniform
             for accessing kernel virtual memory images,  including live systems
 and crash dumps.  See kvm(3).

     libl (-ll)
     libfl (-lfl)
             The  library  for lex(1), a lexical analyzer generator.  The libfl
             library is a hard link to libl.

     libm (-lm)
             Mathematical functions which comprise the C math library, libm.
             See math(3).

     libmenu (-lmenu)
             Terminal-independent  facilities  for composing menu
systems on
             character-cell  terminals.   Functions   using   the
libmenu library
             must  be  linked  with  the  libcurses library, i.e.
-lmenu -lcurses.
             See menu(3).

     libmilter (-lmilter)
             The sendmail(8) mail filter API.  See the documentation in

     libmmalloc (-lmmalloc)
             GNU memory-mapped malloc package.  In this implementation,
             mmap(2) is used to obtain memory  from  the  system,
rather than
             sbrk(2).  See `info mmalloc'.

     libobjc (-lobjc)
             Library for Objective C, an object-oriented superset
of ANSI C.
             Use this to compile Objective C programs.

     libocurses (-locurses)
     libotermcap (-lotermcap)
             Routines to provide the user with a method of updating screens
             with  reasonable  optimisation.   The ocurses(3) library is compatible
  with  the  curses  library  provided  in   4.3.
libotermcap is the
             4.3-compatible  termcap  library, and is a hard link
to libocurses.
             See otermcap(3).

     libopcodes (-lopcodes)
             GNU opcode library.

     libossaudio (-lossaudio)
             Provides an emulation of the OSS (Linux)  audio  interface.  This
             is used only for porting programs.  See ossaudio(3).

     libpanel (-lpanel)
             Terminal-independent facilities for stacked  windows
on charactercell
  terminals.   Functions  using the libpanel library must be
             linked with  the  libcurses  library,  i.e.  -lpanel
-lcurses.  See

     libpcap (-lpcap)
             Packet capture library.  All packets on the network,
even those
             destined for other  hosts,  are  accessible  through
this library.
             See pcap(3).

     libperl (-lperl)
             Support routines for perl(1).

     libpthread (-pthread)
             IEEE  Std  1003.1-2001  (``POSIX'')  threads API and
thread scheduler.
  Threaded applications should use -pthread not
             See pthreads(3).

     libreadline (-lreadline)
             Command line editing interface.  See readline(3).

     libresolv (-lresolv)
             The resolver(3) routines are included in libc.  This
is just an
             empty library for legacy applications that  want  to
link with

     librpcsvc (-lrpcsvc)
             Generated  by  rpcgen(1),  containing stub functions
for many common
             rpc(3) protocols.

     libsectok (-lsectok)
             Library for communicating with ISO 7816  smartcards.

     libskey (-lskey)
             Support  library  for  the  S/Key  one time password
(OTP) authentication
 toolkit.  See skey(3).

     libssl (-lssl)
             The OpenSSL ssl library implements the Secure  Sockets Layer (SSL
             v2/v3)  and Transport Layer Security (TLS v1) protocols.  See

     libstdc++ (-lstdc++)
             GCC subroutine library for C++.  See c++(1).

     libusbhid (-lusbhid)
             Routines to extract data from  USB  Human  Interface
Devices (HIDs).
             See usbhid(3).

     libutil (-lutil)
             System   utility  functions.   These  are  currently
             fmt_scaled(3), fparseln(3), getmaxpartitions(3),
             getrawpartition(3), login(3), login_fbtab(3),  opendev(3),
             opendisk(3),   openpty(3),  pidfile(3),  pw_init(3),
             readlabelfs(3) and uucplock(3).

     libwrap (-lwrap)
             TCP wrapper access control library.   See  hosts_access(3) and

     liby (-ly)
             The library for yacc(1), an LALR parser generator.

     libz (-lz)
             General purpose data compression library.  The functions in this
             library are documented  in  compress(3).   The  data
format is described
 in RFCs 1950 - 1952.

     Platform-specific libraries:

     libalpha (-lalpha)
             Alpha  I/O and memory access functions.  See inb(2).

     libamd64 (-lamd64)
             AMD64  I/O  and  memory   access   functions.    See
             amd64_get_ldt(2),  amd64_get_mtrr(2), amd64_iopl(2),

     libi386 (-li386)
             i386  I/O  and   memory   access   functions.    See
             i386_get_ldt(2), i386_iopl(2), and i386_vm86(2).

LIBRARY TYPES    [Toc]    [Back]

     The  system libraries are located in /usr/lib.  Typically, a
library will
     have a number of variants:


     Libraries with an `.a' suffix are static.  When a program is
     against  a library, all the library code will be linked into
the binary.
     This means the binary can be run even when the libraries are
     However,  it  can  be  inefficient with memory usage.  The C
compiler, cc(1),
     can be instructed  to  link  statically  by  specifying  the
-static flag.

     Libraries  with  a  `.so.X.Y'  suffix are dynamic libraries.
When code is
     compiled dynamically, the library code that the  application
needs is not
     linked  into the binary.  Instead, data structures are added
     information about which  dynamic  libraries  to  link  with.
When the binary
     is  executed,  the run-time linker ld.so(1) reads these data
     and loads them at a virtual address using the mmap(2) system

     `X' represents the major number of the library, and `Y' represents the
     minor number.  In general, a binary will be able  to  use  a
dynamic library
     with  a  differing  minor number, but the major numbers must
match.  In the
     example above, a binary linked with minor number  `3'  would
be linkable
     against  libc.so.30.1, while a binary linked with major number `31' would

     The advantages of dynamic libraries are  that  multiple  instances of the
     same  program can share address space, and the physical size
of the binary
     is smaller.  The disadvantage is the added  complexity  that
comes with
     loading  the libraries dynamically, and the extra time taken
to load the
     libraries.  Of course, if the libraries are  not  available,
the binary
     will  be  unable  to execute.  The C compiler, cc(1), can be
instructed to
     link dynamically by specifying the -shared flag, although on
systems that
     support  it, this will be the default and need not be specified.

     Libraries with a  `_p.a'  suffix  are  profiling  libraries.
They contain extra
 information suitable for analysing programs, such as execution speed
     and call counts.  This in turn can be interpreted by  utilities such as
     gprof(1).   The C compiler, cc(1), can be instructed to generate profiling
     code, or to link with profiling libraries, by specifying the
-pg flag.

     Libraries  with  a `_pic.a' suffix contain position-independent code (PIC).
     Normally, compilers produce relocatable  code.   Relocatable
code needs to
     be  modified at run-time, depending on where in memory it is
to be run.
     PIC code does not need to be modified at  run-time,  but  is
less efficient
     than  relocatable  code.   PIC  code  is  used by shared libraries, which can
     make them slower.  The C compiler, cc(1), can be  instructed
to generate
     PIC  code,  or to link with PIC libraries, by specifying the
-fpic or -fPIC

     With the exception of dynamic libraries, libraries are  generated using
     the  ar(1)  utility.   The libraries contain an index to the
contents of the
     library, stored within the library itself.  The index  lists
each symbol
     defined  by  a member of a library that is a relocatable object file.  This
     speeds up linking to the library, and allows routines in the
library to
     call each other regardless of their placement within the library.  The
     index is created by ranlib(1) and can be viewed using nm(1).

     The  building  of  PIC versions of libraries and dynamic libraries can be
     prevented by setting the  variable  NOPIC  in  /etc/mk.conf.
The building of
     profiling versions of libraries and/or dynamic libraries can
be prevented
     by setting the  variable  NOPROFILE  in  /etc/mk.conf.   See
mk.conf(5) for
     more details.

FILES    [Toc]    [Back]



SEE ALSO    [Toc]    [Back]

     ar(1), c++(1), cc(1), g77(1), gcc-local(1), gprof(1), ld(1),
     lex(1), nm(1), perl(1), ranlib(1), yacc(1),  intro(2),  compress(3),
     crypto(3),  curses(3),  des_crypt(3), editline(3), event(3),
     hosts_access(3),  keynote(3),  kvm(3),   math(3),   menu(3),
     ossaudio(3),  panel(3),  pcap(3),  pthreads(3), readline(3),
     rfc1413(3), rpc(3), sectok(3),  skey(3),  ssl(3),  stdio(3),
     usbhid(3), keynote(4), mk.conf(5)

HISTORY    [Toc]    [Back]

     An intro manual appeared in Version 7 AT&T UNIX.

OpenBSD      3.6                           June      5,      1993
[ Back ]
 Similar pages
Name OS Title
intro NetBSD introduction to the system libraries
dmedia IRIX Introduction to the IRIS Digital Media Libraries
intro IRIX introduction to SVR4 networking functions and libraries
mvIntro IRIX introduction to the Movie Libraries SYNOPSIS (Movie File Library) #include -lmoviefile SY
dh_strip Linux strip executables, shared libraries, and some static libraries
ExtUtils::Liblist IRIX determine libraries to use and how to use them
collide IRIX look for name collisions between libraries
ranlib Tru64 Converts archives to random libraries
ldr_atexit Tru64 Run termination functions for shared libraries
ar HP-UX create and maintain portable archives and libraries
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service