我有使用 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
如有任何帮助,我们将不胜感激。
你只需要在终端中运行它
sudo apt-get install libtbb-dev