任何人都可以告诉我为什么会失败:
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
应该是默认搜索路径之一。
答案 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")