C++ 应用程序找不到共享库

问题描述 投票:0回答:1

我有使用 cmake 和 vcpkg 构建的跨平台 C++ 应用程序。我使用 Visual Studio,在 Windows 中一切正常。我尝试使用 ubuntu 18.04 和 oneAPI 在 docker 容器内编译并运行我的应用程序。我的应用程序已成功编译,但运行后出现一些共享库错误。

/home/rlnn/.vs/rlnnsimplatform/out/build/x64-linux-gcc-debug/main: error while loading shared libraries: libtbb.so.12: cannot open shared object file: No such file or directory

所以我的应用程序找不到 oneTBB 共享库。

我使用

ldd -d main
获取我的应用程序所需的共享库列表。

        linux-vdso.so.1 (0x00007fffb77f2000)
        libmkl_intel_lp64.so.1 => /opt/intel/oneapi/mkl/2021.4.0/lib/intel64/libmkl_intel_lp64.so.1 (0x00007f0b25c33000)
        libmkl_core.so.1 => /opt/intel/oneapi/mkl/2021.4.0/lib/intel64/libmkl_core.so.1 (0x00007f0b217c5000)
        libmkl_tbb_thread.so.1 => /opt/intel/oneapi/mkl/2021.4.0/lib/intel64/libmkl_tbb_thread.so.1 (0x00007f0b1f461000)
        libtbb_debug.so.12 => /opt/intel/oneapi/tbb/latest/lib/intel64/gcc4.8/libtbb_debug.so.12 (0x00007f0b1f1bd000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0b1edb0000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0b1ea12000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0b1e7f3000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0b1e5db000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0b1e1ea000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0b274ff000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0b1dfe6000)
        libtbb.so.12 => /opt/intel/oneapi/tbb/latest/lib/intel64/gcc4.8/libtbb.so.12 (0x00007f0b1dd6e000)

看来所有共享库的路径都已解析。

我尝试将 oneapi 路径添加到 LD_LIBRARY_PATH 但没有帮助


rlnn@16a54760cac8:~/.vs/rlnnsimplatform/out/build/x64-linux-gcc-debug$ echo $LD_LIBRARY_PATH
:/opt/intel/oneapi/tbb/latest/lib/intel64/gcc4.8

所有 tbb 库都位于

 /opt/intel/oneapi/tbb/latest/lib/intel64/gcc4.8

rlnn@16a54760cac8:/opt/intel/oneapi/tbb/latest/lib/intel64/gcc4.8$ cd /opt/intel/oneapi/tbb/latest/lib/intel64/gcc4.8 && ls
libtbb.so             libtbbbind.so.3.4            libtbbbind_2_5.so.3          libtbbmalloc.so            libtbbmalloc_proxy.so.2.4
libtbb.so.12          libtbbbind_2_0.so            libtbbbind_2_5.so.3.4        libtbbmalloc.so.2          libtbbmalloc_proxy_debug.so
libtbb.so.12.4        libtbbbind_2_0.so.3          libtbbbind_2_5_debug.so      libtbbmalloc.so.2.4        libtbbmalloc_proxy_debug.so.2
libtbb_debug.so       libtbbbind_2_0.so.3.4        libtbbbind_2_5_debug.so.3    libtbbmalloc_debug.so      libtbbmalloc_proxy_debug.so.2.4
libtbb_debug.so.12    libtbbbind_2_0_debug.so      libtbbbind_2_5_debug.so.3.4  libtbbmalloc_debug.so.2
libtbb_debug.so.12.4  libtbbbind_2_0_debug.so.3    libtbbbind_debug.so          libtbbmalloc_debug.so.2.4
libtbbbind.so         libtbbbind_2_0_debug.so.3.4  libtbbbind_debug.so.3        libtbbmalloc_proxy.so
libtbbbind.so.3       libtbbbind_2_5.so            libtbbbind_debug.so.3.4      libtbbmalloc_proxy.so.2

我的 Dockerfile 内容

# base image from docker hub with oneAPI based on ubuntu
FROM intel/oneapi-basekit:2021.4-devel-ubuntu18.04
LABEL description="Container for use with Visual Studio"

RUN apt-get update \
  && echo 'y' | apt-get install software-properties-common \
  && add-apt-repository ppa:ubuntu-toolchain-r/test \
  && echo 'y' | apt-get install gcc-10 g++-10 \
  && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10

#install build dependencies
RUN apt-get update && apt-get install -y sudo rsync zip openssh-server make git unzip tar curl ninja-build gdb gfortran zlib1g-dev libboost-all-dev

# configure SSH for communication with Visual Studio 
RUN mkdir -p /var/run/sshd

RUN echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config && \ 
   ssh-keygen -A 

#install vcpkg for c++ dependencies management using vcpkg.json
RUN useradd -m -d /home/rlnn -s /bin/bash -G sudo rlnn && echo 'rlnn:12345' | chpasswd \
  && cd /home/rlnn \
  && git clone https://github.com/Microsoft/vcpkg.git \
  && ./vcpkg/bootstrap-vcpkg.sh \
  && chown -R rlnn /home/rlnn/vcpkg

#ENV LD_LIBRARY_PATH="/opt/intel/oneapi/tbb/latest/lib/intel64/gcc4.8:${LD_LIBRARY_PATH}"

RUN sudo groupadd docker && sudo usermod -aG docker rlnn
   
RUN cd /opt/intel/oneapi/tbb/latest/lib/intel64/gcc4.8 \ 
  && sudo cp libtbb.so.12 /usr/lib/libtbb.so.12

# expose port 22 
EXPOSE 22

如有任何帮助,我们将不胜感激。

c++ visual-studio docker unix cmake
1个回答
0
投票

你只需要在终端中运行它

  sudo apt-get install libtbb-dev
© www.soinside.com 2019 - 2024. All rights reserved.