NAME
lsbcc, lsbc++, lsbcpp - compiler driver for building LSB conforming
applications
SYNOPSIS
lsbcc [lsbcc-options] [compiler-options]
lsbc++ [lsbcc-options] [compiler-options]
lsbcpp [lsbcc-options] [compiler-options]
DESCRIPTION
This tool should be used in place of the cc, c++ or cpp command when
building an LSB-conforming program.
LSB-conforming programs must link dynamically only with LSB-required
and application-supplied shared libraries, as no other libraries can be
guaranteed to be present on an LSB-compliant system. They must only
use specified interfaces from LSB-required shared libraries. LSB
programs also need to be linked with a special program interpreter
which identifies them as LSB conforming.
The LSB development environment provides a set of replacement system
headers and stub dynamic libraries. These headers and libraries have
been carefully built so that they contain only the interfaces specified
in the LSB. When the stub libraries are used for link-time symbol
resolution, the use of unspecified interfaces in those libraries will
result in link failures.
lsbcc is designed to apply the LSB build conventions with a minimum of
changes to existing build setups. When invoked as the compiler, it
first modifies the command line to follow the LSB build conventions,
then passes the resulting command line on to the regular compiler, so
lsbcc is effectively a wrapper program.
lsbcc takes a number of options prefixed with --lsb-, or alternatively;
behavior other than the default can be controlled by a set of
environment variables. Typically command line options will override
options set through envionment varibles.
LSBCC OPTIONS
--lsb-help
Display help message. The compiler --help option will also
display the output from --lsb-help.
--lsb-version
Display the version of LSB this tool can build for.
--lsb-verbose
The complete command line passed to either the C or C++ compiler
will be printed to stderr just prior to execution. This helps
see the effects of lsbcc and options.
--lsb-cc=<path to c compiler>
Specifies the name of the C compiler to invoke with the modifed
argument set. If this environment variable is not found, the
default cc will be used. This setting overrides the LSBCC
environment setting.
--lsb-cxx=<path to c++ compiler>
Specifies the name of the C++ compiler to invoke with the
modifed argument set. If this environment variable is not found,
the default c++ will be used. This setting overrides the LSBCXX
environment setting.
--lsb-cpp=<path to c preprocessor>
Specifies the name of the C preprocessor to invoke with the
modified argument set. If this setting is not found, the
default cpp will be used. This setting overrides the LSB_CPP
environment setting.
--lsb-forcefeatures
This causes lsbcc to insert macro defines for all of the
interface features it supports (e.g. -DHAVE_BSD, -DHAVE_GNU...).
These macros are not needed for the LSB headers but may select
necessary behavior in non-LSB headers that have conditionals.
However, predefining the macros may collide with application
defintions of the macros, so this is no longer the default
behavior for lsbcc.
--lsb-libpath=<lsb_lib_path>
Specifies the location of the LSB stub libraries that will be
linked against. If this option or the LSBCC_LIBS environment
variable is not set, the default /opt/lsb/lib will be used.
This option overrides the LSBCC_LIBS envionment setting.
--lsb-includepath=<include_path>
Specifies the location of the LSB header files that will be
linked against. If this option or the LSBCC_INCLUDES
environment variable is not set, the default /opt/lsb/include
will be used. This option overrides the LSBCC_INCLUDES
envionment setting.
--lsb-cxx-includepath=<include_path>
Specifies the location of the LSB header files that will be
linked against. If this option or the LSBCXX_INCLUDES
environment variable is not set, the default /opt/lsb/include
will be used. This option overrides the LSBCXX_INCLUDES
envionment setting.
--lsb-shared-libs=<shared_lib:...>
This option adds libraries to the list of non-lsb libraries to
link as shared libraries (such as product internal shared
libraries). A library name or colon-separated list of library
names to add to the default list. The name should be the base
part of the library only, for example to add libfoo.so use the
name foo.
--lsb-shared-libpath=<path:...>
This option adds paths to be searched for shared libraries.
Libraries found in the given set of paths will be added to the
list of non-lsb libraries to link as shared libraries.
--lsb-modules=<module,..>
Enable support for the optional LSB modules listed. Currently
the only supported optional module is ’Multimedia’ which
provides the ALSA libraries. Modules will added in addition to
any added from the LSB_MODULES environment setting.
ENVIRONMENT
The following environment variables affect the behavior of lsbcc
LSBCC Specifies the name of the C compiler to invoke with the modifed
argument set. If this environment variable is not found, the
default cc will be used.
LSBCXX Specifies the name of the C++ compiler to invoke with the
modifed argument set. If this environment variable is not found,
the default c++ will be used.
LSB_CPP
Specifies the name of the C preprocessor to invoke with the
modified argument set. If this environment variable is not
found, the default cpp will be used.
LSBCC_LIBS
Specifies the location of the LSB stub libraries that will be
linked against. If this environment variable is not found, the
default /opt/lsb/lib will be used (or /opt/lsb/lib64 on certain
64-bit architectures).
LSBCC_INCLUDES
Specifies the location of the LSB header files that will be
linked against. If this environment variable is not found, the
default /opt/lsb/include will be used.
LSBCXX_INCLUDES
Specifies the location of the LSB C++ header files that will be
linked against. If this environment variable is not found, the
default /opt/lsb/include/c++ will be used.
LSBCC_SHAREDLIBS
A library name or colon-separated list of library names to add
to the default list. The name should be the base part of the
library only, for example to add libfoo.so use the name foo.
LSB_SHAREDLIBPATH
This option adds paths to be searched for shared libraries.
Libraries found in the given set of paths will be added to the
list of non-lsb libraries to link as shared libraries.
LSB_MODULES
Specify which optional LSB modules to include interfaces for.
Currently ’Toolkit_Qt’ is the only supported optional module.
LSBCC_FORCEFEATURES
This causes lsbcc to insert macro defines for all of the
interface features it supports (e.g. -DHAVE_BSD, -DHAVE_GNU...).
This can be helpful in some situations and was formerly the
default behavior for lsbcc, but also can collide with feature
macro definitions from other sources, so is no longer the
default behavior for lsbcc.
LSBCC_DEBUG
A numeric value which represents a bit pattern specifying what
kinds of debugging output to produce. The bits in this pattern
are
0x0001 Display enviromental overrides
0x0002 Display the arguments passed in
0x0004 Display the arguments that are specifically recognized
0x0008 Display the arguments that are not recognized
0x0010 Display changes made to the include arguments
0x0020 Display changes made to the library arguments
0x0040 Display the modified argument list
LSBCC_WARN
A numeric value which represents a bit pattern specifying what
kinds of warnings to emit. The bits in this pattern are
0x0001 Warn about libraries being changed to static linking
The 01 value is now on by default, to disable it specify an
LSBCC_WARN where the low bit is set to zero.
LSBCC_VERBOSE
The complete command line passed to either the C or C++ compiler
will be printed to stderr just prior to execution. This helps
see the effects of lsbcc and options.
Non LSB Shared Libraries
Normally, only LSB-defined libraries should be linked as shared
libraries, all others must be linked statically. However, if an
application provides its own shared libraries which have been carefully
checked for LSB conformance, the following methods can be used to
selectively overrride lsbcc’s rule of forcing static linking. The
application may not depend on such a library being present on a system,
so it must either be shipped with the application, or with another LSB
conforming application on which this application depends.
Libs added with any of these options will be cumlative. Shared libs
added with command line options must appear on the command line before
any -l options to have effect.
--lsb-shared-libs=<shared_lib:...>
This option adds libraries to the list of non-lsb libraries to
link as shared libraries (such as product internal shared
libraries). A library name or colon-separated list of library
names to add to the default list. The name should be the base
part of the library only, for example to add libfoo.so use the
name foo.
--lsb-shared-libpath=<path:...>
This option adds paths to be searched for shared libraries.
Libraries found in the given set of paths will be added to the
list of non-lsb libraries to link as shared libraries.
LSBCC_SHAREDLIBS
A library name or colon-separated list of library names to add
to the default list. The name should be the base part of the
library only, for example to add libfoo.so use the name foo.
LSB_SHAREDLIBPATH
This option adds paths to be searched for shared libraries.
Libraries found in the given set of paths will be added to the
list of non-lsb libraries to link as shared libraries.
EXAMPLES
lsbcc hello.c -o hello
CC=lsbcc CXX=lsbc++ ./configure; make
LSBCC_SHAREDLIBS=tcl:tk CC=lsbcc make
AUTHORS
Stuart Anderson <anderson@freestandards.org> and other LSB
contributors.
REPORTING BUGS
Report bugs at http://bugs.linuxbase.org.
BUGS
It is possible to confuse lsbcc’s (and lsbc++) automatic library
processing. In particular, build systems that include "clever" tools
to manage which libraries to use, such as GNU libtool and pkgconfig,
may defeat the checks for non-LSB libraries by silently supplying full
pathnames instead of the -llib form.
FILES
/opt/lsb/include
the LSB header files
/opt/lsb/lib
the LSB stub libraries
/lib/ld-lsb.so.3
The LSB program interpreter (dynamic linker) for the IA32
architecture
/lib/ld-lsb-ia64.so.3
The LSB program interpreter for the Itanium architecture
/lib/ld-lsb-ppc32.so.3
The LSB program interpreter for the PowerPC 32-bit architecture
/lib64/ld-lsb-ppc64.so.3
The LSB program interpreter for the PowerPC 64-bit architecture
/lib/ld-lsb-s390.so.3
The LSB program interpreter for the S390 architecture
/lib64/ld-lsb-s390x.so.3
The LSB program interpreter for the S390X architecture
/lib64/ld-lsb-x86-64.so.3
The LSB program interpreter for the x86_64 architecture
SEE ALSO
lsbappchk
NOTES
lsbcc is commonly delivered as a package named lsb-build-cc. If this
package is used, the support package lsb-build-base must also be
installed.
lsb-build-c++ supplies necessary header files for C++ compilation; it
is a separate package as the c++ headers come from a different source
than the base headers.
For commercial applications, developers need to be aware of the
licenses of the libraries they link to. Since some licenses allow
dynamic but not static linking to the library, and lsbcc may silently
change (apparent) dynamic links to static, the LSBCC_WARN envirnonment
variable should be used to notify of such changes.
COPYRIGHT
Copyright © 2002-2007 Linux Foundation
SEE ALSO
Linux Standard Base specification and other documents at
http://www.linuxbase.org/