pkg-config не может найти пакет в каталоге sysroot

Может кто-нибудь, пожалуйста, скажите мне, почему это может не работать:

afeder@ubuntu:~/android/toolchain/sysroot$ ls $PKG_CONFIG_SYSROOT_DIR/usr/local/lib/pkgconfig/mozjs185.pc
/home/afeder/android/toolchain/sysroot/usr/local/lib/pkgconfig/mozjs185.pc

afeder@ubuntu:~/android/toolchain/sysroot$ pkg-config mozjs185 --cflags
Package mozjs185 was not found in the pkg-config search path.
Perhaps you should add the directory containing `mozjs185.pc'
to the PKG_CONFIG_PATH environment variable
No package 'mozjs185' found

Согласно man pkg-config(1), /usr/local/lib/pkgconfig должен быть одним из путей поиска по умолчанию. .


person Anders Feder    schedule 10.02.2012    source источник


Ответы (2)


Я нашел ответ здесь: http://www.flameees.eu/autotools-mythbuster/pkgconfig/cross-compiling.html

Сценарий-оболочка должен не только устанавливать переменную PKG_CONFIG_SYSROOT_DIR: при кросс-компиляции вы хотите игнорировать пакеты, установленные в системе, а вместо этого полагаться только на те, которые установлены в кросс-компилируемой среде. Это достигается сбросом PKG_CONFIG_DIR (в котором перечислены дополнительные пути поиска) и одновременной установкой PKG_CONFIG_LIBDIR для переопределения базовых путей поиска по умолчанию.


Результирующий файл CMake будет выглядеть примерно так:

set(CMAKE_SYSROOT "/path/to/sysroot")

set(ENV{PKG_CONFIG_DIR} "")
set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig")
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})

Отказ от ответственности: я использовал переменную CMAKE_SYSROOT, которая полезна, когда вы хотите передать -sysroot в g++. Если вы этого не хотите, вы должны назвать свою переменную по-другому.

person Anders Feder    schedule 10.02.2012
comment
Привет, не могли бы вы показать команду, которую вы ввели, чтобы заставить это работать, спасибо - person puk; 02.12.2013

Если вы используете кросс-компилятор, вам необходимо 1) установить соответствующую оболочку pkg-config и 2) установить соответствующие переменные среды, которые будут использоваться оболочкой. Вы можете найти соответствующую оболочку с помощью apt-cache search pkg-config-, а затем установить. Например. при кросс-компиляции в armhf: sudo apt-get install pkg-config-arm-linux-gnueabihf. Затем установите переменные среды PKG_CONFIG_DIR, PKG_CONFIG_LIBDIR и PKG_CONFIG_SYSROOT_DIR по мере необходимости перед вызовом оболочки.

Если вы выполняете кросс-компиляцию с помощью CMake, обратите внимание, что команда CMake pkg_search_module (предоставленная FindPkgConfig.cmake), похоже, неправильно устанавливает среду для оболочки. Вместо этого вам следует использовать переменную среды PKG_CONFIG_PATH.

# Set these in your toolchain.cmake file
set(triple arm-linux-gnueabihf)
set(PKG_CONFIG_EXECUTABLE ${triple}-pkg-config)
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/lib/${triple}/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig")

См. также установить PKG_CONFIG_PATH в cmake

person bleater    schedule 04.07.2018