pkg-config无法在sysroot目录下找到包

时间:2012-02-10 00:48:55

标签: cross-compiling spidermonkey pkg-config

任何人都可以告诉我为什么会失败:

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

根据pkg-config的手册页,/usr/local/lib/pkgconfig应该是默认搜索路径之一。

2 个答案:

答案 0 :(得分:10)

我在这里找到答案:http://www.flameeyes.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++时,该变量非常有用。如果你不想这样,你应该以不同的方式命名你的变量。

答案 1 :(得分:0)

如果使用的是交叉编译器,则需要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")

另请参阅set PKG_CONFIG_PATH in cmake