Changes between Version 11 and Version 12 of CompilationGuide/Generic


Ignore:
Timestamp:
Oct 30, 2017, 10:48:55 AM (3 weeks ago)
Author:
slhck
Comment:

minor formatting improvements

Legend:

Unmodified
Added
Removed
Modified
  • CompilationGuide/Generic

    v11 v12  
    1 This page provides some generic instructions for compiling a project starting from the source code package under UNIX and derivatives. Note that the basic principles are shared by most Linux / Unix distributions and MinGW. 
     1This page provides some generic instructions for compiling a project starting from the source code package under Unix and derivatives. Note that the basic principles are shared by most Linux / Unix distributions and MinGW. 
    22 
    33Note that in this guide there is nothing strictly specific to FFmpeg. 
     
    66 
    77Binary packages are usually provided by third party packagers for many platforms, but in some cases they are not an option for several reasons: 
    8 * the binary packages is outdated or contains critical bugs or is missing required features which are available in the later version of the software 
    9 * you need to customize the build, for example to support a particular installation layout, to get platform-specific optimizations or to link against particular libraries which are not supported in the binary package 
    10 * you want to customize the software by editing the source code 
     8* The binary packages is outdated or contains critical bugs or is missing required features which are available in the later version of the software. 
     9* You need to customize the build, for example to support a particular installation layout, to get platform-specific optimizations or to link against particular libraries which are not supported in the binary package. 
     10* You want to customize the software by editing the source code. 
    1111 
    1212In all these cases building a package from source looks like the best solution. 
     
    4040 
    4141The following directories are usually involved in the installation: 
    42 * PREFIX/bin: contains the generated binaries (e.g. {{{ffmpeg}}}, {{{ffplay}}}, {{{ffprobe}}} etc. in the case of FFmpeg) 
    43 * PREFIX/include: contains the library headers (e.g. {{{libavutil/avstring.h}}}, {{{libavcodec/avcodec.h}}}, {{{libavformat/avformat.h}}} etc. in case of FFmpeg) required to compile applications linked against the package libraries 
    44 * PREFIX/lib: contains the generated libraries (e.g. {{{libavutil}}}, {{{libavcodec}}}, {{{libavformat}}} etc. in the case of FFmpeg)  
    45 * PREFIX/share: contains various system-independent components; especially documentation files and examples 
     42* `PREFIX/bin`: contains the generated binaries (e.g. {{{ffmpeg}}}, {{{ffplay}}}, {{{ffprobe}}} etc. in the case of FFmpeg) 
     43* `PREFIX/include`: contains the library headers (e.g. {{{libavutil/avstring.h}}}, {{{libavcodec/avcodec.h}}}, {{{libavformat/avformat.h}}} etc. in case of FFmpeg) required to compile applications linked against the package libraries 
     44* `PREFIX/lib`: contains the generated libraries (e.g. {{{libavutil}}}, {{{libavcodec}}}, {{{libavformat}}} etc. in the case of FFmpeg)  
     45* `PREFIX/share`: contains various system-independent components; especially documentation files and examples 
    4646 
    4747By specifying the prefix it is possible to define the installation layout. 
     
    6060A list of the affected variables follows: 
    6161 
    62 * PATH: defines the list of {{{:}}}-separated paths where the system looks for binaries. For example if you install your package in {{{/usr/local/}}}, you should update the PATH so that it will contain {{{/usr/local/bin}}}. This can be done for example through the command {{{export PATH=/usr/local/bin:$PATH}}}. 
    63 * LD_LIBRARY_PATH: contains the {{{:}}}-separated paths where the system looks for libraries. For example if you install your package in {{{/usr/local/}}}, you should update the LD_LIBRARY_PATH so that it will contain {{{/usr/local/lib}}}. This can be done for example through the command {{{export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH}}}. This variable is sometimes deprecated in favor of the use of {{{ldconfig}}}. 
    64 * CFLAGS: contains flags used by the C compiler, and usually includes preprocessing directives like {{{-IPREFIX/include}}} or compilation flags. Custom CFLAGS are usually prefixed to the source package compiler flags by the source package build system. Alternatively many build systems allow to specify the configure option {{{-extra-cflags}}}.  
    65 * LDFLAGS: these are directives used by the linker, and usually include linking directives like {{{-LPREFIX/lib}}} needed to find libraries installed in custom paths. Custom LDFLAGS are usually prefixed to the source package linker flags by the source package build system. Alternatively, many build systems allow to specify the configure option {{{-extra-ldflags}}}. 
    66 * PKG_CONFIG_PATH: contains the {{{:}}}-separated paths used by {{{pkg-config}}} to detect the pkg-config files used by many build systems to detect the custom CFLAGS/LDFLAGS used by a specific library. 
     62* `PATH`: defines the list of {{{:}}}-separated paths where the system looks for binaries. For example if you install your package in {{{/usr/local/}}}, you should update the PATH so that it will contain {{{/usr/local/bin}}}. This can be done for example through the command {{{export PATH=/usr/local/bin:$PATH}}}. 
     63* `LD_LIBRARY_PATH`: contains the {{{:}}}-separated paths where the system looks for libraries. For example if you install your package in {{{/usr/local/}}}, you should update the LD_LIBRARY_PATH so that it will contain {{{/usr/local/lib}}}. This can be done for example through the command {{{export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH}}}. This variable is sometimes deprecated in favor of the use of {{{ldconfig}}}. 
     64* `CFLAGS`: contains flags used by the C compiler, and usually includes preprocessing directives like {{{-IPREFIX/include}}} or compilation flags. Custom CFLAGS are usually prefixed to the source package compiler flags by the source package build system. Alternatively many build systems allow to specify the configure option {{{-extra-cflags}}}.  
     65* `LDFLAGS`: these are directives used by the linker, and usually include linking directives like {{{-LPREFIX/lib}}} needed to find libraries installed in custom paths. Custom LDFLAGS are usually prefixed to the source package linker flags by the source package build system. Alternatively, many build systems allow to specify the configure option {{{-extra-ldflags}}}. 
     66* `PKG_CONFIG_PATH`: contains the {{{:}}}-separated paths used by {{{pkg-config}}} to detect the pkg-config files used by many build systems to detect the custom CFLAGS/LDFLAGS used by a specific library. 
    6767 
    6868In case you installed a package in a non standard path, you need to update these environment libraries so that system tools will be able to detect the package components. This is especially required when running a configure script for a package relying on other installed libraries/headers/tools.  
     
    7272Remember to export the variables to the child process, e.g. using the {{{export}}} command. Read the fine documentation of your shell for more detailed information.   
    7373 
    74 == LD_LIBRARY_PATH and ldconfig == 
     74== `LD_LIBRARY_PATH` and `ldconfig` == 
    7575 
    7676When you link a library depending on other libraries the tools will look for the libraries to link in a list of standard paths (typically {{{/usr/lib}}}) and in other paths which are set in the system. Some systems rely on the {{{LD_LIBRARY_PATH}}} library. Alternatively, you may set the global path through the {{{ldconfig}}} utility, which is done editing the {{{/etc/ld.so.conf}}} system configuration file. 
    7777 
    7878Note that on some systems the {{{LD_LIBRARY_PATH}}} variable defined in the shell profile is reset for security reasons (e.g. see https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/366728), so you may need to reset it per-session or per-script. 
    79  
    8079 
    8180== Configuration prerequisites and distribution packages == 
     
    9291== Post-installation troubleshooting == 
    9392 
    94 First of all verify that the binaries, headers and libraries have been installed in the supposed location (along the PREFIX path). To verify the binaries install you can simply run a command with the tool name, and verify the complete path with {{{which -a}}}, which will show all the tools with the given name available in the system. 
     93First of all verify that the binaries, headers and libraries have been installed in the supposed location (along the `PREFIX` path). To verify the binaries install you can simply run a command with the tool name, and verify the complete path with {{{which -a}}}, which will show all the tools with the given name available in the system. 
    9594 
    9695Extra care must be paid in case you have several installations of the same package in order to avoid conflicts.