pkg-config
A tool to find and compiler options for libraries.
pkg-config is a tool for making sure compiler options are correct when compiling and linking software. Very often with compilers, you will need to determine the proper paths to library header files and code in order to link them to your software project. Finding the correct paths to pass to the compiler can be a challenge. pkg-config is designed to assist with that.
Using pkg-config on the HPC#
You do not need to load any environment modules to use pkg-config on the HPC. Call the pkg-config executable from the shell with the proper options, and it will work. The main options you will need are as follows:
Basic usage looks like the following example, where LIBRARYNAME should be replaced by the name of whatever library you
are looking to use (e.g., netcdf, hd5, etc).
This will output the paths in the following format:
This output can then be used to compile programs. You can do so by either copy/pasting the output from pkg-config or by
assigning the output of pkg-config to a custom environment variable. To do the latter, refer to the example below (again,
replace LIBRARYNAME with the name of whatever library you intend to use).
This can all be wrapped up succinctly into a simple workflow for compiling programs and linking them to external libraries. Refer to the following example:
Example: Compling a netCDF program using pkg-config#
In this example, we will use the simple_xy_wr.c program from UCAR.
This code is available on the HPC in the /gpfs/research/software volume1:
To start, load the environment module for the gnu compiler:
Next, call the pkg-config executable with the --cflags and --libs options:
Now you can use these paths in the compilation process. The best way to do that is to assign the output to an environment variable. This is done as follows:
You can now use that variable to compile and link the code. For example, this would look as follows:
This will compile the program. Here are the commands all together:
pkg-config in Makefiles#
pkg-config can be used in build automation files such as Makefiles. We can use the same example as above for this
use-case.
An example Makefile using the simple_xy_wr example would have the contents:
If you name this file Makefile and ensure that the source code (simple_xy_wr.c) is located in the same directory,
you can use the command make to compile your program.
Troubleshooting#
If you encounter an error such as the following, make sure you have loaded the correct environment module, for the compiler you are using, and make sure you have typed the name of the library correctly.
Example error:
If you encounter this or any other errors, feel free to contact RCC support.
-
You can also download the file from the UCAR website ↩