I am trying to build OpenCV app component libs for LS1028ARDB using flex-builder:
bld -c opencv -r ubuntu:desktop
My sdk.yml file has the following entry:
opencv:
branch: 4.10.0_imx
I have modified my packages/apps/eiq/opencv.mk to look like this:
.PHONY: opencv
opencv: dependency
ifeq ($(CONFIG_EIQ_OPENCV), "y")
ifeq ($(DESTARCH),arm64)
@[ $(DISTROTYPE) != ubuntu ] && exit || \
$(call fbprint_b,"OpenCV") && \
$(call fetch-git-tree,opencv,apps/eiq) && \
$(call fetch-git-tree,armcl,apps/eiq) && \
mkdir -p $(eIQDIR)/opencv/build && \
cd $(eIQDIR)/opencv/build && \
mkdir -p $(eIQDESTDIR)/usr/local/OpenCV && \
export DESTDIR=$(eIQDESTDIR) && \
CXX=$(CROSS_COMPILE)g++ CC=$(CROSS_COMPILE)gcc \
export PKG_CONFIG_FOUND=TRUE && \
export PKG_CONFIG_LIBDIR=$(RFSDIR)/usr/lib/aarch64-linux-gnu/pkgconfig && \
export PKG_CONFIG_PATH=$(RFSDIR)/usr/share/pkgconfig && \
export PKG_CONFIG_EXECUTABLE=$(RFSDIR)/usr/bin/pkg-config && \
cmake -DCMAKE_TOOLCHAIN_FILE=$(eIQDIR)/opencv/platforms/linux/aarch64-gnu.toolchain.cmake \
-DBUILD_opencv_gapi=OFF \
-DBUILD_GTHREAD=OFF \
-DBUILD_GLIB=OFF \
-DBUILD_GTK2=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DJPEG_LIBRARY=$(RFSDIR)/usr/lib/aarch64-linux-gnu/libjpeg.so \
-DPNG_LIBRARY=$(RFSDIR)/usr/lib/aarch64-linux-gnu/libpng.so \
-DGTK2_LIBRARIES=$(RFSDIR)/usr/lib/aarch64-linux-gnu/libgtk-x11-2.0.so \
-DGTHREAD_LIBRARIES=$(RFSDIR)/usr/lib/aarch64-linux-gnu/libgthread-2.0.so \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=OFF -DWITH_GTK=ON -DWITH_GTK_2_X=ON -DWITH_FFMPEG=ON \
-DCMAKE_SYSROOT=$(RFSDIR) -DZLIB_LIBRARY=$(RFSDIR)/lib/aarch64-linux-gnu/libz.so \
-DWITH_OPENCL=OFF -DBUILD_JASPER=ON -DINSTALL_TESTS=ON \
-DBUILD_EXAMPLES=ON -DBUILD_opencv_apps=ON \
-DPYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 \
-DPYTHON3_EXECUTABLE=/usr/bin/python3 -DCMAKE_INSTALL_PREFIX=/usr/local \
-DPYTHON3_INCLUDE_DIR=$(RFSDIR)/usr/include/python3.8 \
-DPYTHON3_LIBRARY=$(RFSDIR)/usr/lib/aarch64-linux-gnu/libpython3.8.so \
-DPYTHON3_NUMPY_INCLUDE_DIRS=$(RFSDIR)/usr/lib/python3/dist-packages/numpy/core/include \
-DPYTHON3_PACKAGES_PATH=/usr/local/lib -DENABLE_VFPV3=OFF -DENABLE_NEON=ON \
-DFFMPEG_INCLUDE_DIRS=$(RFSDIR)/usr/include/aarch64-linux-gnu \
-DOPENCV_EXTRA_CXX_FLAGS="-I$(RFSDIR)/usr/include/gtk-2.0 -I$(RFSDIR)/usr/include/cairo \
-I$(RFSDIR)/usr/lib/aarch64-linux-gnu/glib-2.0/include -I$(RFSDIR)/usr/include/pango-1.0 \
-I$(RFSDIR)/usr/lib/aarch64-linux-gnu/gtk-2.0/include -I$(RFSDIR)/usr/include/gdk-pixbuf-2.0 \
-I$(RFSDIR)/usr/include/glib-2.0 -I$(RFSDIR)/usr/include/harfbuzz \
-I$(RFSDIR)/usr/include/atk-1.0 -I$(RFSDIR)/usr/include/aarch64-linux-gnu \
-I$(eIQDIR)/armcl/include -I$(RFSDIR)/usr/include/opencv4 -L$(RFSDIR)/usr/lib/aarch64-linux-gnu/ -lgtk-x11-2.0 -lgthread-2.0 -lglib-2.0" .. && \
make -j$(JOBS) && make install && \
cp -f bin/* $(eIQDESTDIR)/usr/local/bin && \
cp -f ../samples/dnn/models.yml $(eIQDESTDIR)/usr/local/OpenCV/ && \
cp -r ../samples/data $(eIQDESTDIR)/usr/local/OpenCV && \
cd $(eIQDESTDIR)/usr/local/lib/cv2/python-3.8 && \
mv cv2.cpython-38-x86_64-linux-gnu.so cv2.cpython-38-aarch64-linux-gnu.so && cd - && \
$(call fbprint_d,"OpenCV")
endif
endif
There seems to be trouble linking with the glib library. I am getting following complaints from the linker:
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o: in function `cvImageWidget_class_init(void*, void*)':
window_gtk.cpp:(.text._ZL24cvImageWidget_class_initPvS_+0x14): undefined reference to `g_type_class_peek'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL24cvImageWidget_class_initPvS_+0x1c): undefined reference to `g_type_check_class_cast'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o: in function `icvOnTrackbar(_GtkWidget*, void*)':
window_gtk.cpp:(.text._ZL13icvOnTrackbarP10_GtkWidgetPv+0x1c): undefined reference to `g_type_check_instance_cast'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o: in function `icvWindowThreadLoop(void*)':
window_gtk.cpp:(.text._ZL19icvWindowThreadLoopPv+0x28): undefined reference to `g_usleep'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL19icvWindowThreadLoopPv+0x2c): undefined reference to `g_thread_yield'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL19icvWindowThreadLoopPv+0x58): undefined reference to `g_usleep'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL19icvWindowThreadLoopPv+0x5c): undefined reference to `g_thread_yield'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o: in function `cvImageWidgetSetImage(_CvImageWidget*, void const*)':
window_gtk.cpp:(.text._ZL21cvImageWidgetSetImageP14_CvImageWidgetPKv+0x188): undefined reference to `g_type_check_instance_cast'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL21cvImageWidgetSetImageP14_CvImageWidgetPKv+0x27c): undefined reference to `g_type_check_instance_cast'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o: in function `cvImageWidget_size_request(_GtkWidget*, _GtkRequisition*)':
window_gtk.cpp:(.text._ZL26cvImageWidget_size_requestP10_GtkWidgetP15_GtkRequisition+0x24): undefined reference to `g_type_check_instance_cast'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL26cvImageWidget_size_requestP10_GtkWidgetP15_GtkRequisition+0x9c): undefined reference to `g_type_register_static_simple'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o: in function `resizeWindow_(std::shared_ptr<CvWindow> const&, int, int)':
window_gtk.cpp:(.text._ZL13resizeWindow_RKSt10shared_ptrI8CvWindowEii+0x4c): undefined reference to `g_type_check_instance_cast'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL13resizeWindow_RKSt10shared_ptrI8CvWindowEii+0x68): undefined reference to `g_type_check_instance_cast'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL13resizeWindow_RKSt10shared_ptrI8CvWindowEii+0x80): undefined reference to `g_type_check_instance_cast'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: window_gtk.cpp:(.text._ZL13resizeWindow_RKSt10shared_ptrI8CvWindowEii+0xf0): undefined reference to `g_type_register_static_simple'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: CMakeFiles/opencv_highgui.dir/src/window_gtk.cpp.o: in function `cvImageWidget_set_size(_GtkWidget*, int, int)':
...
etc
I have the glib, gtk, gthread, etc. libs in my rfs /usr/lib/aarch64-linux-gnu folder.
Any ideas?