CUDA-11.0 wrong pkgconfig and found the root cause with proposed workaround

I found that pkg-config --libs cuda-11.0 gives me wrong path

$ pkg-config --libs cuda-11.0
-L/usr/local/cuda-11.0/x86_64-linux/lib -lcuda

But when I look at that location, it doesn’t exist.

$ ls /usr/local/cuda-11.0/x86_64-linux/lib
ls: cannot access '/usr/local/cuda-11.0/x86_64-linux/lib': No such file or directory

Problem is that this path is missing /targets/ between /usr/local/cuda-11.0 and x86_64-linux/lib.

$ ls /usr/local/cuda-11.0/targets/x86_64-linux/lib

libOpenCL.so             libcublas.so.11            libcudart.so.11.0.167    libcuinj64.so           libcurand.so.10              libcusparse.so             libnppial.so             libnppidei.so.11.0.0.191  libnppim.so.11           libnppitc.so             libnvToolsExt.so.1.0.0   libnvperf_target.so
libOpenCL.so.1           libcublas.so.11.1.0.213    libcudart_static.a       libcuinj64.so.11.0      libcurand.so.10.2.0.191      libcusparse.so.11          libnppial.so.11          libnppif.so               libnppim.so.11.0.0.191   libnppitc.so.11          libnvblas.so             libnvrtc-builtins.so
libOpenCL.so.1.0         libcublasLt.so             libcufft.so              libcuinj64.so.11.0.167  libcusolver.so               libcusparse.so.11.0.0.191  libnppial.so.11.0.0.191  libnppif.so.11            libnppist.so             libnppitc.so.11.0.0.191  libnvblas.so.11          libnvrtc-builtins.so.11.0
libOpenCL.so.1.0.0       libcublasLt.so.11          libcufft.so.10           libculibos.a            libcusolver.so.10            liblapack_static.a         libnppicc.so             libnppif.so.11.0.0.191    libnppist.so.11          libnpps.so               libnvblas.so.11.1.0.213  libnvrtc-builtins.so.11.0.167
libaccinj64.so           libcublasLt.so.11.1.0.213  libcufft.so.10.1.3.191   libcupti.so             libcusolver.so.10.4.0.191    libmetis_static.a          libnppicc.so.11          libnppig.so               libnppist.so.11.0.0.191  libnpps.so.11            libnvjpeg.so             libnvrtc.so
libaccinj64.so.11.0      libcudadevrt.a             libcufftw.so             libcupti.so.11.0        libcusolverMg.so             libnppc.so                 libnppicc.so.11.0.0.191  libnppig.so.11            libnppisu.so             libnpps.so.11.0.0.191    libnvjpeg.so.11          libnvrtc.so.11.0
libaccinj64.so.11.0.167  libcudart.so               libcufftw.so.10          libcupti.so.2020.1.0    libcusolverMg.so.10          libnppc.so.11              libnppidei.so            libnppig.so.11.0.0.191    libnppisu.so.11          libnvToolsExt.so         libnvjpeg.so.11.0.0.191  libnvrtc.so.11.0.167
libcublas.so             libcudart.so.11.0          libcufftw.so.10.1.3.191  libcurand.so            libcusolverMg.so.10.4.0.191  libnppc.so.11.0.0.191      libnppidei.so.11         libnppim.so               libnppisu.so.11.0.0.191  libnvToolsExt.so.1       libnvperf_host.so        stubs

This is inside NGC docker image nvcr.io/nvidia/tensorflow:20.06-tf2-py3 but also on the host machine if cuda-11.0 is installed with package manager. So, these files

/usr/lib/pkgconfig$ ls

accinj64-11.0.pc  cuda-11.0.pc    cufft-11.0.pc   cuinj64-11.0.pc  cusolver-11.0.pc  nppc-11.0.pc  nppial-11.0.pc  nppicom-11.0.pc  nppif-11.0.pc  nppim-11.0.pc   nppisu-11.0.pc  npps-11.0.pc        nvidia-ml-11.0.pc  nvrtc-11.0.pc
cublas-11.0.pc    cudart-11.0.pc  cufftw-11.0.pc  curand-11.0.pc   cusparse-11.0.pc  nppi-11.0.pc  nppicc-11.0.pc  nppidei-11.0.pc  nppig-11.0.pc  nppist-11.0.pc  nppitc-11.0.pc  nvToolsExt-11.0.pc  nvjpeg-11.0.pc

contains wrong PATH information.

/usr/lib/pkgconfig$ cat cuda-11.0.pc 
cudaroot=/usr/local/cuda-11.0
libdir=${cudaroot}/x86_64-linux/lib
includedir=${cudaroot}/x86_64-linux/include

Name: cuda
Description: CUDA Driver Library
Version: 11.0
Libs: -L${libdir} -lcuda
Cflags: -I${includedir}

So, simple workaround is to create a symlink inside /usr/local/cuda-11.0/
sudo ln -s targets/x86_64-linux/ x86_64-linux