ldd:在 docker 中使用 qemu 时以未知退出代码退出

ggi*_*der 7 qemu ldd docker

我正在尝试使用 docker 和 qemu 在我的 x86 主机上构建arm镜像

我使用arm64v8/ubuntu作为基础镜像

我制作了一个简单的 opencv 程序并尝试使用 ldd 命令来查看依赖关系。

然而,ldd总是显示:

ldd:退出,退出代码未知 (132)

如果我保存此图像并将其加载到 Arm 计算机中,ldd 就会起作用。

但是,我的主项目太大(或者我的arm计算机空间太小),无法导入到arm计算机,我想使用ldd来找出该项目真正需要哪些库。

我还尝试 nvcr.io/nvidia/l4t-base:r32.4.4 作为基础图像和 ldd 显示

ldd:退出,退出代码未知 (139)

如果我在 docker 中的 arm 镜像中并且我的主机是 x86,我应该怎么做才能使用 ldd 命令?

我的 dockerfile 是这样的:

FROM arm64v8/ubuntu
ENV TZ=Asia/Taipei
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt-get install -y  \ 
    build-essential -y  \
    cmake -y  \
    git -y  \
    libgtk2.0-dev -y  \
    libjpeg-dev -y  \
    libpng-dev -y  \
    libtiff-dev -y  \
    pkg-config -y && \
    apt-get clean
WORKDIR /home/gino/
RUN git clone https://github.com/opencv/opencv.git && \
    cd ./opencv && \
    mkdir build && \
    cd build && \
    cmake  \
        -D BUILD_SHARED_LIBS=ON \ 
        -D WITH_QT=OFF \
        -D WITH_OPENGL=OFF \ 
        -D FORCE_VTK=OFF \
        -D WITH_TBB=OFF \ 
        -D WITH_GDAL=OFF \ 
    -D WITH_V4L=ON \
        -D WITH_XINE=OFF \ 
        -D BUILD_EXAMPLES=OFF \
        -D ENABLE_PRECOMPILED_HEADERS=OFF \
        -D BUILD_DOCS=OFF \
        -D BUILD_PERF_TESTS=OFF \
        -D BUILD_TESTS=OFF \
        -D BUILD_opencv_apps=OFF \
    -D CMAKE_INSTALL_PREFIX=/home/gino/opencv_install \
        .. && \
    make -j8 && \
    make install && \
    ldconfig && \
    apt-get clean
WORKDIR /home/gino/
RUN rm -R ./opencv 
ADD ./ /home/gino/cvtest/
WORKDIR /home/gino/cvtest/

RUN make clean all

ENV HOME /home/developer
CMD /home/gino/cvtest/dockertest
Run Code Online (Sandbox Code Playgroud)

主程序

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
    Mat frame;
    VideoCapture video(-1);
    while(video.isOpened())
    {
        video>>frame;
        imshow("frame",frame);
        waitKey(1);
    }
    cout << "Hello World!" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)