PKG_CONFIG_PATH environment variable

478,980

Solution 1

PKG_CONFIG_PATH is a environment variable that specifies additional paths in which pkg-config will search for its .pc files.

This variable is used to augment pkg-config's default search path. On a typical Unix system, it will search in the directories /usr/lib/pkgconfig and /usr/share/pkgconfig. This will usually cover system installed modules. However, some local modules may be installed in a different prefix such as /usr/local. In that case, it's necessary to prepend the search path so that pkg-config can locate the .pc files.

The pkg-config program is used to retrieve information about installed libraries in the system. The primary use of pkg-config is to provide the necessary details for compiling and linking a program to a library. This metadata is stored in pkg-config files. These files have the suffix .pc and reside in specific locations known to the pkg-config tool.

To check the PKG_CONFIG_PATH value use this command:

echo $PKG_CONFIG_PATH

To set the PKG_CONFIG_PATH value use:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

or

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

Solution 2

To see where pkg-config (version 0.24 or later) searches for installed libraries by default, use the following command:

pkg-config --variable pc_path pkg-config

To add to that path, set the PKG_CONFIG_PATH environment variable. The man file states PKG_CONFIG_PATH is:

A colon-separated (on Windows, semicolon-separated) list of directories to search for .pc files. The default directory will always be searched after searching the path; the default is libdir/pkgconfig:datadir/pkgconfig where libdir is the libdir where pkg-config and datadir is the datadir where pkg-config was installed.

Solution 3

The first answer is not technically explicit enough. From the man page (open a terminal, type man pkg-config):

pkg-config retrieves information about packages from special metadata files. These files are named after the package, and has a .pc extension. On most systems, pkg-config looks in /usr/lib/pkgconfig, /usr/share/pkgconfig, /usr/local/lib/pkgconfig and /usr/local/share/pkgconfig for these files. It will additionally look in the colon-separated (on Windows, semicolon-separated) list of directories specified by the PKG_CONFIG_PATH environment variable.

So the pkg-config program is not in the PKG_CONFIG_PATH directory; however, if you install a library, for the information to use it in an automake script to be accessible it needs to be in a directory pkg-config is aware of.

Solution 4

I looked at the man-page on my 64-bit system and got a bit confused. It said in one line:

pkg-config retrieves information about packages from special metadata files. These files are named after the package, with the extension .pc. By default, pkg-config looks in the direc‐ tory prefix/lib/pkgconfig for these files; it will also look in the colon-separated (on Windows, semicolon-separated) list of directories specified by the PKG_CONFIG_PATH environment vari‐ able.

I had assumed that it alwas looks in the directories lib/pkgconfig. Turns out its the directories themselves. In my case, I was trying to compile the hello world gtk tutorial. I locate the file i want e.g.

locate gtk | grep '\.pc'

Among the results are:

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

Finally was to do an export.

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/

Solution 5

You're trying to build a piece of software, let's say Widget. Widget relies on another library, libcog for the sake of argument. Widget's build process (probably a configure script) is using pkg-config to determine how to use libcog. pkg-config doesn't know anything about libcog.

If libcog isn't installed, that's your problem. There is a good chance that a standard install of libcog will fix the problem. Depending on your system, you may need to install an addition "developer" version of the package; it often has "-devel" or "-dev" at the end, so if you install "libcog", you might also need to install "libcog-devel".

If libcog is installed, it's probably not installed in a way that pkg-config can find it. There is probably a libcog.pc file somewhere on your system. For the sake of argument, it's at /opt/cog/lib/pkgconfig/libcog.pc. In that case, you can tell pkg-config about it by setting the PKG_CONFIG_PATH to the directory holding libcog.pc. So in a Bourne shell or similar, something like

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/

Once that's done, re-running the command that failed will hopefully work.

If libcog is installed, including the libraries and header files, and you don't have a libcog.pc file, things are going poorly. Presumably a standard install of libcog includes the information, or else Widget wouldn't rely on it. I'd first investigate reinstalling libcog. It is possible to manually create the libcog.pc file, but getting it right is difficult and highly specific to a given library.

Share:
478,980

Related videos on Youtube

MKJ
Author by

MKJ

Updated on September 18, 2022

Comments

  • MKJ
    MKJ 3 months

    Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.

    What does this mean ?

    • Admin
      Admin about 8 years
      I would almost ask this the same way except you could have asked for examples of the proper usage of PKG_CONFIG_PATH environment variable like "what is it and how do I use it?" It seems like the answers you got were trying to tell you this. I'm finding this show up a lot during ./configure when it fails to find dependencies.
  • albfan
    albfan almost 8 years
    a useful script will be echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
  • underscore_d
    underscore_d over 7 years
    The key phrase appears to be "on most systems". On my Debian, for instance, we get /usr/local/lib/x86_64-linux-gnu thrown in as an automatic search location for free (with an empty PKG_CONFIG_PATH), and indeed, lots of .pc files - notable including GTK+ et al. - live there. The reason for this is to enable multi-architecture availability of a package simultaneously, as outlined here: askubuntu.com/questions/449348/…
  • underscore_d
    underscore_d over 7 years
    (can't edit anymore) @GrandAdmiral in an answer further down this page showed how to check the default paths that pkg-config will search on your system: askubuntu.com/a/373217/436580
  • underscore_d
    underscore_d over 7 years
    PKG_CONFIG_PATH specifies additional directories in which to search for only yourPkg.pc (pkg-config specification) files. It does not affect pkg-specific things like library search directories.
  • underscore_d
    underscore_d over 7 years
    +1 for pointing out how the man page is oversimplifying for modern, multi-architecture-capable systems. I was confused for a while because, on Debian 8 x86, pkg-config already looks in the x86_64 folder (without anything in PKG_CONFIG_PATH). I'm not sure how this was incorporated, but the command line to probe this shown by @GrandAdmiral indicates it's controlled by the --variable pc_path that is set (somehow!) for pkg-config's own package.
  • NoBugs
    NoBugs about 7 years
    One thing though - what if PKG_CONFIG_PATH is defined - this will overwrite it correct?
  • Timothy Gu
    Timothy Gu over 5 years
    @NathanKidd Thanks for the reminder, comment deleted. The original error seems to have been resulted from a non-original author edit anyway.
  • Nathan Kidd
    Nathan Kidd over 5 years
    @remram it looks like the errors are fixed now but your comment leaves people confused if they don't carefully examine the edit history. Could you check you're happy with current accuracy and perhaps delete the comment then? (And I'll delete mine.)
  • Shayan
    Shayan almost 5 years
    @devav2 both export commands don't fix the issue
  • Joe Malt
    Joe Malt over 4 years
    @NoBugs good catch, I've edited the answer (several years later!) to append it instead.
  • SiennaD.
    SiennaD. over 4 years
    This answer was really useful to me, thanks! I was trying to figure out what the default search path for pkg-config was since mine is installed with Linuxbrew, so the default paths don't exist. Thanks!
  • Vipertecpro
    Vipertecpro almost 3 years
    Thank you that really helped, i run it like this for making cef build : export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/share/pkgconfig/ and export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/p‌​kgconfig/
  • Kemin Zhou
    Kemin Zhou almost 3 years
    This command is useful, on my Ubuntu the /usr/lib/x86_64-linux-gnu/pkgconfig directory is included in the output. I was just wondering this path is in the default search path.