I get "lapack.h: No such file or directory" although I installed liblapack-dev

17,800

Solution 1

I experienced a similar issue on Debian. I noticed that

dpkg -L liblapack-dev

did not return a single header file. So I did some searching with apt-cache and found what appears to be C headers. After installing via

sudo apt-get install liblapacke-dev

(note the extra e!), I was able to compile a minimal working example, found here. Modifying the include at the top to read

#include <lapacke.h>

and compiling with

gcc -llapack lapack_example.c

successfully runs on my system. Hope this helps someone.

Solution 2

Answering because it doesn't fit in a comment:

The manual says:

Standard C language APIs for LAPACK

collaboration LAPACK and INTEL Math Kernel Library Team

    LAPACK C INTERFACE is now included in the LAPACK package (in the lapacke directory)

    LAPACKE User Guide

    Updated: April 20, 2012

    header files: lapacke.h, lapacke_config.h, lapacke_mangling.h, lapacke_utils.h

so perhaps you need to

#include <lapacke.h>
Share:
17,800
iCanLearn
Author by

iCanLearn

Updated on July 22, 2022

Comments

  • iCanLearn
    iCanLearn almost 2 years

    I installed liblapack-dev and its dependencies using Synaptic, and I included <lapack.h> in my code.

    If I try to compile my program like this...

    mpicc program.c -llapack -o output
    

    ...I get the following error:

    program.c:4:20: fatal error: lapack.h: No such file or directory 
    compilation terminated.
    

    How can I fix this? I've already spent hours googling for a solution but nothing helped.

    I'm using Linux Mint, but I tried the same thing on the latest version of Ubuntu and it still wouldn't work. Same thing when I try "eliminating" MPI from my program and compiling with gcc.

  • iCanLearn
    iCanLearn over 11 years
    I'll upvote this because you're trying to help me, but the truth is: I actually tried that first, and it is what I ultimately want to use (lapacke), but then I realised that not even lapack (without the "e") works for me and figured I should get that working first (since lapacke is a part of lapack).
  • Daniel Fischer
    Daniel Fischer over 11 years
    Ah, but the point is that there is no lapack.h, as far as I can determine. Maybe the user's guide sheds more light.
  • iCanLearn
    iCanLearn over 11 years
    There is lapack.h because I've seen programs using it run on other computers. I've already seen the user's guide. Admittedly, I haven't read the whole thing, but still, I haven't found a solution to my problems in the parts of it which seemed relevant.
  • Daniel Fischer
    Daniel Fischer over 11 years
    I've searched the sources, at least the LAPACK package has no lapack.h. The C interface it provides is LAPACKE, but you have to prefix the functions you call, info = LAPACKE_dgels(LAPACK_ROW_MAJOR,'N',m,n,nrhs,*a,lda,*b,ldb); etc. Maybe there was a lapack.h in older versions, or it comes from another package where it is used. I can't find anything helpful about using LAPACK with lapack.h with google, sorry.
  • iCanLearn
    iCanLearn over 11 years
    Yeah, sorry, I think you might be right, "lapack.h" might even be a Fortran-only thing (and what I saw was possibly "mkl_lapack.h"?)
  • Toby
    Toby over 7 years
    Thanks, that helped me to get opencv to compile.