我正在尝试使用OpenCV 4.3和与OpenCV链接的我自己的C ++程序创建一个docker映像,这两个都是针对Linux构建的。因为构建OpenCV需要花费相当长的时间,并且生成的docker映像非常大,并且我只需要libopencv_core.so
和libopencv_calib3d.so
,所以我尝试创建以下两层:
不幸的是,链接器输出
error while loading shared libraries: libopencv_core.so.4.3: cannot open shared object file: No such file or directory
添加中
RUN ls /usr/local/lib
在执行程序的命令之前的第二层中,显示了我已成功复制了构建的库文件:
libopencv_calib3d.so
libopencv_calib3d.so.4.3
libopencv_calib3d.so.4.3.0
libopencv_core.so
libopencv_core.so.4.3
libopencv_core.so.4.3.0
我已经尝试过这些语句使这些库可见:
RUN ldconfig /usr/local/lib
RUN export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib"
RUN ldconfig -v
ldconfig -v
在其他地方打印的地方:
/usr/local/lib:
libopencv_calib3d.so.4.3 -> libopencv_calib3d.so.4.3.0
libopencv_core.so.4.3 -> libopencv_core.so.4.3.0
我有点困惑,因为ldconfig
没有列出libopencv_calib3d.so
,这就是为什么我尝试手动创建simlink的原因,但它抱怨libopencv_calib3d.so
已经存在。因此,似乎所有东西都可以运行我的程序。有什么建议我做错了吗?
附录
这是我正在使用的Dockerfile(简化为重要部分:
FROM vookimedlo/ubuntu-clang:clang_bionic AS builder
# Install dependencies
RUN apt-get update & ...
ARG libPath=/usr/local/lib
# Install OpenCV
RUN git clone & cmake & make install
tar -czvf ${libPath}/opencv.tar.gz /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_calib3d.so.4.* /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_core.so.4.*
# Download and build my program
...
FROM ubuntu AS runtime
ARG libPath=/usr/local/lib
# Copy compiled libraries
COPY --from=builder ${libPath}/opencv.tar.gz ${libPath}/opencv.tar.gz
RUN tar -xvf ${libPath}/opencv.tar.gz -C / && rm ${libPath}/opencv.tar.gz
# Copy my program
...
RUN ldconfig /usr/local/lib
RUN export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib"
RUN ldconfig -v
# Run my program
CMD ...
在OP中,他们提到使用.so.4.*
。这将不会获得.so.4文件,只会获得.so.4文件。文件。我怀疑正在发生什么是.so-> .so.4-> so.4-> .so.4.3-> .so.4.3.0链接链缺少链接。
要解决以下几行:
# Install OpenCV
RUN git clone & cmake & make install
tar -czvf ${libPath}/opencv.tar.gz /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_calib3d.so.4.* /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_core.so.4.*
应更新为:
# Install OpenCV
RUN git clone & cmake & make install
tar -czvf ${libPath}/opencv.tar.gz \
/usr/local/lib/libopencv_calib3d.so* \
/usr/local/lib/libopencv_core.so*
((仅添加换行符和\以使某些内容易于阅读)
从生成的系统中进行确认的ls -l / usr / local / lib / libopencv_ *的长列表。