-
Mathieu Faverge authoredMathieu Faverge authored
Linking an external application with Chameleon libraries
Compilation and link with Chameleon libraries have been tested with
the GNU compiler suite gcc/gfortran
and the Intel compiler suite
icc/ifort
.
Flags required
The compiler, linker flags that are necessary to build an application using Chameleon are given through the pkg-config mechanism.
export PKG_CONFIG_PATH=/home/jdoe/install/chameleon/lib/pkgconfig:$PKG_CONFIG_PATH pkg-config --cflags chameleon pkg-config --libs chameleon pkg-config --libs --static chameleon
The .pc files required are located in the sub-directory
lib/pkgconfig
of your Chameleon install directory.
Static linking in C
Lets imagine you have a file main.c
that you want to link with
Chameleon static libraries. Lets consider
/home/yourname/install/chameleon
is the install directory
of Chameleon containing sub-directories include/
and
lib/
. Here could be your compilation command with gcc
compiler:
gcc -I/home/yourname/install/chameleon/include -o main.o -c main.c
Now if you want to link your application with Chameleon static libraries, you could do:
gcc main.o -o main \ /home/yourname/install/chameleon/lib/libchameleon.a \ /home/yourname/install/chameleon/lib/libchameleon_starpu.a \ /home/yourname/install/chameleon/lib/libcoreblas.a \ -lstarpu-1.2 -Wl,--no-as-needed -lmkl_intel_lp64 \ -lmkl_sequential -lmkl_core -lpthread -lm -lrt
As you can see in this example, we also link with some dynamic
libraries starpu-1.2, Intel MKL libraries (for
BLAS/LAPACK/CBLAS/LAPACKE), pthread, m (math) and rt. These
libraries will depend on the configuration of your Chameleon
build. You can find these dependencies in .pc files we generate
during compilation and that are installed in the sub-directory
lib/pkgconfig
of your Chameleon install directory. Note also that
you could need to specify where to find these libraries with -L
option of your compiler/linker.
Before to run your program, make sure that all shared libraries
paths your executable depends on are known. Enter ldd main
to check. If some shared libraries paths are missing append them
in the LD_LIBRARY_PATH (for Linux systems) environment
variable (DYLD_LIBRARY_PATH on Mac).
Dynamic linking in C
For dynamic linking (need to build Chameleon with CMake option BUILD_SHARED_LIBS=ON) it is similar to static compilation/link but instead of specifying path to your static libraries you indicate the path to dynamic libraries with -L option and you give the name of libraries with -l option like this:
gcc main.o -o main \ -L/home/yourname/install/chameleon/lib \ -lchameleon -lchameleon_starpu -lcoreblas \ -lstarpu-1.2 -Wl,--no-as-needed -lmkl_intel_lp64 \ -lmkl_sequential -lmkl_core -lpthread -lm -lrt
Note that an update of your environment variable LD_LIBRARY_PATH (DYLD_LIBRARY_PATH on Mac) with the path of the libraries could be required before executing
export LD_LIBRARY_PATH=path/to/libs:path/to/chameleon/lib
Using Chameleon executables
Chameleon provides several test executables that are compiled and
linked with Chameleon’s dependencies. Instructions about the
arguments to give to executables are accessible thanks to the
option -[-]help
or -[-]h
. This set of binaries are separated into
three categories and can be found in three different directories: