6

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

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

4

2 回答 2

20

我在这里找到了答案: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当你想传递-sysrootg++. 如果你不想要这个,你应该以不同的方式命名你的变量。

于 2012-02-10T20:36:06.100 回答
0

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

另请参阅在 cmake 中设置 PKG_CONFIG_PATH

于 2018-07-04T04:46:26.690 回答