【问题标题】:pkg-config fails to find package under sysroot directorypkg-config 在 sysroot 目录下找不到包
【发布时间】:2012-02-10 00:48:55
【问题描述】:

谁能告诉我为什么这会失败:

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 应该是默认搜索路径之一。

【问题讨论】:

    标签: cross-compiling spidermonkey pkg-config


    【解决方案1】:

    我在这里找到了答案: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++ 时它很有用。如果您不希望这样,您应该以不同的方式命名您的变量。

    【讨论】:

    • 嗨,你能不能显示你发出的命令来让它工作,谢谢
    • 根据linux.die.net/man/1/pkg-config,我认为您的意思是PKG_CONFIG_PATH 而不是PKG_CONFIG_DIR
    【解决方案2】:

    如果您使用的是交叉编译器,那么您需要 1) 安装适当的 pkg-config 包装器和 2) 设置适当的环境变量以供包装器使用。您可以使用apt-cache search pkg-config- 找到合适的包装器,然后安装。例如。如果交叉编译为 armhf:sudo apt-get install pkg-config-arm-linux-gnueabihf。然后,在调用包装器之前,根据需要设置环境变量PKG_CONFIG_DIRPKG_CONFIG_LIBDIRPKG_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

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2014-06-05
      • 1970-01-01
      • 2016-11-07
      • 2013-02-25
      相关资源
      最近更新 更多