我正在尝试将Raspberry Pi的OpenStream与GStreamer交叉编译。我在amd64上使用Debian,并已安装dpkg来安装armhf软件包。这是我当前的构建脚本。
PKG_CONFIG_LIBDIR="/usr/local/arm-linux-gnueabihf/lib/pkgconfig"
PKG_CONFIG_LIBDIR="$PKG_CONFIG_LIBDIR:/usr/local/lib/arm-linux-gnueabihf/pkgconfig"
PKG_CONFIG_LIBDIR="$PKG_CONFIG_LIBDIR:/usr/lib/arm-linux-gnueabihf/pkgconfig"
PKG_CONFIG_LIBDIR="$PKG_CONFIG_LIBDIR:/usr/arm-linux-gnueabihf/lib/pkgconfig"
export PKG_CONFIG_LIBDIR
cmake -D CMAKE_BUILD_TYPE=Debug \
-D PYTHON3_INCLUDE_PATH=/usr/include/python3.7m \
-D PYTHON3_LIBRARIES=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \
-D BUILD_opencv_python3=ON \
-D PYTHON3_CVPY_SUFFIX='.cpython-37m-arm-linux-gnueabihf.so' \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER_0_10=OFF \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D WITH_GTK=OFF \
-D CPACK_BINARY_DEB=ON \
-D CPACK_GENERATOR="DEB" \
-D CPACK_DEBIAN_PACKAGE_MAINTAINER="Steven Spangler" \
-D CPACK_DEBIAN_PACKAGE_NAME="OpenCV" \
-D CPACK_DEBIAN_PACKAGE_VERSION="${OPENCV_VERSION}" \
-D CPACK_DEBIAN_PACKAGE_ARCHITECTURE="armhf" \
-D OPENCV_ENABLE_NONFREE=ON \
-D CMAKE_TOOLCHAIN_FILE="../platforms/linux/arm-gnueabi.toolchain.cmake" \
-B "${CV_DIR}/build/" \
-S "${CV_DIR}"
对于每个GStreamer组件,我都会收到如下错误:
-- Checking for module 'gstreamer-base-1.0'
-- Found gstreamer-base-1.0, version 1.14.4
CMake Warning at cmake/OpenCVUtils.cmake:784 (message):
ocv_check_modules(GSTREAMER_base): can't find library 'gstbase-1.0'.
Specify 'pkgcfg_lib_GSTREAMER_base_gstbase-1.0' manualy
Call Stack (most recent call first):
modules/videoio/cmake/detect_gstreamer.cmake:85 (ocv_check_modules)
modules/videoio/cmake/init.cmake:3 (include)
modules/videoio/cmake/init.cmake:23 (add_backend)
cmake/OpenCVModule.cmake:313 (include)
cmake/OpenCVModule.cmake:376 (_add_modules_1)
modules/CMakeLists.txt:7 (ocv_glob_modules)
运行pkg-config gstreamer-base-1.0 --libs --cflags
后,我得到-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0
。如果再执行pkg-config gstbase-1.0 --libs --cflags
,它将找不到它。
尽管如此,CMake仍然声称能够找到GStreamer,并且确实可以成功编译。但是,当您尝试在目标系统上使用OpenCV的GStreamer组件时,它将永久挂起。