sdg*_*sdh 2 gtk debian pkg-config node.js node-gyp
我试图用来libui-node构建一个Node.js项目。
$ yarn add libui-node
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误:
在pkg-config搜索路径中未找到node-gyp configure build软件包gtk + -3.0。也许您应该将包含`gtk + -3.0.pc'的目录添加到PKG_CONFIG_PATH环境变量中没有找到gyp软件包'gtk + -3.0':调用'pkg-config gtk + -3.0 --cflags-only-I | sed s / -I // g'在binding.gyp中返回了退出状态0。同时尝试加载binding.gyp gyp ERR!配置错误...
因此,我按照说明进行操作:
$ pkg-config gtk+-3.0 --cflags-only-I | sed s/-I//g
Run Code Online (Sandbox Code Playgroud)
在pkg-config搜索路径中找不到软件包gtk + -3.0。也许您应该将包含gtk + -3.0.pc的目录添加到PKG_CONFIG_PATH环境变量中没有找到包gtk + -3.0
但是,我已经使用以下命令安装了gtk + -3.0:
$ sudo apt-get install build-essential libgtk-3-dev
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 17.10上。
我的PKG_CONFIG_PATH:
$ echo $PKG_CONFIG_PATH
Run Code Online (Sandbox Code Playgroud)
/ usr / lib / pkgconfig:/ usr / local / lib / pkgconfig:
我应该如何配置我的系统,以便它可以找到该库?
编辑:
如@BrettHale在此SO回答中所述,
pkg-config更容易显示要查找.pc文件的默认位置。这使用特殊的虚拟包来公开配置。这比解析调试日志或使用(这节省了我的一天不止一次)要容易得多,但重点是教我们如何在不知道看哪里的情况下获取信息。pkg-config --variable pc_path pkg-configpkg-configpkg-configstrace
原始答案:
您不必设置PKG_CONFIG_PATH。通常,您的发行版使用的路径与pkg-config默认情况下将查找的路径匹配。
pkg-config查找.pc与GTK + 3相关libgtk-3-dev的.pc文件。安装完开发包后,您可以在其中找到使用以下命令提供的文件:
$ dpkg -L libgtk-3-dev | grep '\.pc'
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-wayland-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-unix-print-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-wayland-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-x11-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-x11-3.0.pc
Run Code Online (Sandbox Code Playgroud)
这些结果适用于我的Ubuntu 14.04系统,但在适用于amd64的Ubuntu 17.10上,该文件尚未移动,仍然是:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
Run Code Online (Sandbox Code Playgroud)
现在该文件已命名gtk+-3.0.pc,因此模块所期望的pkg-config名称是不带.pc扩展名的名称,即gtk+-3.0。这有助于确保您没有在模块名称中输入错误。
例如,
pkg-config --modversion gtk+3.0
Run Code Online (Sandbox Code Playgroud)
会告诉您找不到gtk+3.0并应该更改PKG_CONFIG_PATH,但实际上,真正的问题是模块名称错误,因为缺少-字符。
现在,我们将pkg-config以其默认配置运行,而无需定制PKG_CONFIG_PATH。这将检查系统的默认行为,pkg-config仅查看其默认路径:
unset PKG_CONFIG_PATH
pkg-config --modversion gtk+-3.0
Run Code Online (Sandbox Code Playgroud)
如果这返回了GTK +的版本,那么您就完成了。如果您仍然收到错误消息,指出仍未找到,则可以检查pkg-config调试日志中默认情况下的外观。只需添加--debug选项:
pkg-config --debug --modversion gtk+-3.0
Run Code Online (Sandbox Code Playgroud)
这将返回一个非常详细的日志,以记录检测.pc文件的位置。这是Ubuntu 14.04系统的前几行:
Option --debug seen
Option --modversion seen
Error printing enabled by default due to use of --version, --libs, --cflags, --libs-only-l, --libs-only-L, --libs-only-other, --cflags-only-I, --cflags-only-other or --list. Value of --silence-errors: 0
Error printing enabled
Adding virtual 'pkg-config' package to list of known packages
Cannot open directory '/usr/local/lib/x86_64-linux-gnu/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/lib/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/share/pkgconfig' in package search path: No such file or directory
Scanning directory '/usr/lib/x86_64-linux-gnu/pkgconfig'
[...]
Run Code Online (Sandbox Code Playgroud)
请注意以Cannot open directory和开头的行Scanning directory。他们告诉你在pkg-config看什么。我们只显示一下:
$ pkg-config --debug --modversion gtk+-3.0 2>&1 | egrep "(Cannot open|Scanning) directory"
Cannot open directory '/usr/local/lib/x86_64-linux-gnu/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/lib/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/share/pkgconfig' in package search path: No such file or directory
Scanning directory '/usr/lib/x86_64-linux-gnu/pkgconfig'
Scanning directory '/usr/lib/pkgconfig'
Scanning directory '/usr/share/pkgconfig'
Run Code Online (Sandbox Code Playgroud)
现在,您拥有了要搜索的所有位置。这些在我的14.04和Ubuntu 17.04中是相同的(我在docker容器中检查了它)。这些目录中有些存在,有些则不存在。您会发现/usr/lib/x86_64-linux-gnu/pkgconfig那里适合我,所以/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc被发现了。
如果不适合您,可以,可以将其添加到PKG_CONFIG_PATH:
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig
Run Code Online (Sandbox Code Playgroud)
现在,这应该返回由GTK +库检测到的版本pkg-config:
pkg-config --modversion gtk+-3.0
Run Code Online (Sandbox Code Playgroud)