コンパイルエラーあるある/cannot find -l***

makeでコンパイルした時にライブラリが見つからないのでエラーになる.

ld: cannot find -lfoo

解決策

  • 本当にライブラリが入ってるか確認 (fooにはライブラリ名が入る,-lhdf5が無いなら fooはhdf5)
ldconfig -p | grep libfoo
  • シンボリックリンクが貼れているのか確認
ll /usr/lib/*foo*

libhdf5の時はx86_64-linux-gnuにライブラリがインストールされてたので

ll /usr/lib/x86_64-linux-gnu/*hdf5*

すると

-rwxr-xr-x 1 root root 8278106 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial.a*
-rwxr-xr-x 1 root root 1065454 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_cpp.a*
lrwxrwxrwx 1 root root      29 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_cpp.so -> libhdf5_serial_cpp.so.103.3.0*
lrwxrwxrwx 1 root root      29 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_cpp.so.103 -> libhdf5_serial_cpp.so.103.3.0*
-rwxr-xr-x 1 root root  480288 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_cpp.so.103.3.0*
-rwxr-xr-x 1 root root  480910 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_fortran.a*
lrwxrwxrwx 1 root root      33 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_fortran.so -> libhdf5_serial_fortran.so.102.1.0*
lrwxrwxrwx 1 root root      33 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_fortran.so.102 -> libhdf5_serial_fortran.so.102.1.0*
-rwxr-xr-x 1 root root  313632 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_fortran.so.102.1.0*
-rwxr-xr-x 1 root root  220746 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.a*
-rwxr-xr-x 1 root root   14390 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl_cpp.a*
lrwxrwxrwx 1 root root      32 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl_cpp.so -> libhdf5_serial_hl_cpp.so.100.1.5*
lrwxrwxrwx 1 root root      32 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl_cpp.so.100 -> libhdf5_serial_hl_cpp.so.100.1.5*
-rwxr-xr-x 1 root root   23024 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl_cpp.so.100.1.5*
-rwxr-xr-x 1 root root  218836 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serialhl_fortran.a*
lrwxrwxrwx 1 root root      35 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serialhl_fortran.so -> libhdf5_serialhl_fortran.so.100.0.6*
lrwxrwxrwx 1 root root      35 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serialhl_fortran.so.100 -> libhdf5_serialhl_fortran.so.100.0.6*
-rwxr-xr-x 1 root root  158280 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serialhl_fortran.so.100.0.6*
lrwxrwxrwx 1 root root      28 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so -> libhdf5_serial_hl.so.100.1.4*
lrwxrwxrwx 1 root root      28 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.100 -> libhdf5_serial_hl.so.100.1.4*
-rwxr-xr-x 1 root root  142832 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.100.1.4*
-rwxr-xr-x 1 root root    6691 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial.settings*
lrwxrwxrwx 1 root root      25 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial.so -> libhdf5_serial.so.103.3.0*
lrwxrwxrwx 1 root root      25 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial.so.103 -> libhdf5_serial.so.103.3.0*
-rwxr-xr-x 1 root root 3737472 Dec  9  2021 /usr/lib/x86_64-linux-gnu/libhdf5_serial.so.103.3.0*

エラーは

ld: cannot find -lhdf5
ld: cannot find -lhdf5_hl

だったので,libhdf5.soとlibhdf5_hl.soのリンクが無い!ということで・・・

sudo ln -s libhdf5_serial.so libhdf5.so
sudo ln -s libhdf5_serial_hl.so libhdf5_hl.so

とやれば解決.無事エラーは解消された.

参考(以下を見ながら試行錯誤した)