CMake cross compiler problem with pkg_check_modules for some packages

asked 2017-12-08 13:31:46 -0500

eld1e6o gravatar image

updated 2017-12-08 19:42:20 -0500

Hello!

Introduction

I'm trying to cross compile opencv trough crosstool-ng, and I'm having problems, I cannot good compile it (I can compile It but without GTK2, when I try to find the neccesary packages (GTK2 in this case), cmake cannot find them.

Test through find_package

To understand what is happening, I run a test of my own CMakeList.txt (CMakeLists.txt) with my toolchain.cmake file, and the results are:

find_package( GTK2 REQUIRED ),

=> Found

Also, if I try from the terminal:

cmake -DCMAKE_TOOLCHAIN_FILE=~/x-tools/my-toolchain.cmake --find-package -DNAME=GTK2 -DCOMPILER_ID=GNU -DLANGUAGE=CXX  -DMODE=EXIST

=> GTK2 found.

Test through pkg_check_modules

Then the method find_package seems to work, but OpenCV uses pkg_check_modules (another method using .pc files) I made a CMakeLists.txt with the function:

find_package(PkgConfig)

pkg_check_modules (GTK2 gtk+-2.0)

message("${PKG_CONFIG_FOUND}")

=> Not found

Additional content:

The CMakeLists.txt of openCV uses internally pkg_check_modules, and as I can see, it doesn't work. In my computer, CMake can find and stand for some libraries but not for all, I'm having problems with pkg_check_modules. Also, if I try with another libraries, I can find them (as example, GLib). Both gtk+-2.0.pc and glib-2.0.pc files are in the same directory, and the final libraries are in the same destination folder, by that, I don't think that is a PATH configuration error. I cannot hardcode them because I need to cross compile more packages later

If I run these tests on target, I can find all packages (and all files on the next directories are synced), also I have repaired the incorrect symbolic links

/lib
/usr/include
/usr/lib
/usr/local/include
/usr/local/lib
/usr/share/pkg-config

In my toolchain.cmake file:

set( RPI_PKGCONFIG_LIBDIR "${RPI_PKGCONFIG_LIBDIR}:${RPI_ROOTFS}/usr/lib/aarch64-linux-gnu/pkgconfig" )

set( RPI_PKGCONFIG_LIBDIR "${RPI_PKGCONFIG_LIBDIR}:${RPI_ROOTFS}/usr/share/pkgconfig" )

set( RPI_PKGCONFIG_LIBDIR "${RPI_PKGCONFIG_LIBDIR}:${RPI_ROOTFS}/usr/lib/pkgconfig" )

set( RPI_PKGCONFIG_LIBDIR "${RPI_PKGCONFIG_LIBDIR}:${RPI_ROOTFS}/opt/ocv/lib/pkgconfig" )

And the contents of my .pc files

$ find . -name glib-2.0.pc

./usr/lib/aarch64-linux-gnu/pkgconfig/glib-2.0.pc

$ find . -name gtk+-2.0.pc

./usr/lib/aarch64-linux-gnu/pkgconfig/gtk+-2.0.pc

And it contents:

$ cat glib-2.0.pc
prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/aarch64-linux-gnu
includedir=${prefix}/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: GLib
Description: C Utility Library
Version: 2.48.2
Requires.private: libpcre
Libs: -L${libdir} -lglib-2.0 
Libs.private: -pthread  -lpcre    
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include

$ cat gtk+-2.0.pc

prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib/aarch64-linux-gnu
includedir=${prefix}/include
target=x11

gtk_binary_version=2.10.0
gtk_host=aarch64-unknown-linux-gnu

Name: GTK+
Description: GTK+ Graphical UI Library (${target} target)
Version: 2.24.30
Requires: gdk-${target}-2.0 atk cairo gdk-pixbuf-2.0 gio-2.0 pangoft2
Libs: -L${libdir} -lgtk-${target}-2.0 
Cflags: -I${includedir}/gtk-2.0

Also, If I try with the dependencies of GTK2, I have problems with some of them, such as cairo and gdk-x11-2.0, Note that cairo.pc is in ... (more)

edit retag flag offensive close merge delete