在pkg-config搜索路径中未找到cairo包。Node.js安装canvas问题。

139

我安装node中的canvas模块遇到了问题。看起来是与cairo有关,我收到了这个错误信息...

npm http GET https://registry.npmjs.org/canvas
npm http 304 https://registry.npmjs.org/canvas
npm http GET https://registry.npmjs.org/nan
npm http 304 https://registry.npmjs.org/nan

> canvas@1.1.3 install /Users/plimb/Desktop/motion-therapy/node_modules/canvas
> node-gyp rebuild

Package cairo was not found in the pkg-config search path.
Perhaps you should add the directory containing `cairo.pc'
to the PKG_CONFIG_PATH environment variable
No package 'cairo' found
gyp: Call to './util/has_cairo_freetype.sh' returned exit status 0. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:424:16)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:789:12)
gyp ERR! System Darwin 13.0.0
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/plimb/Desktop/motion-therapy/node_modules/canvas
gyp ERR! node -v v0.10.21
gyp ERR! node-gyp -v v0.10.10
gyp ERR! not ok
npm ERR! weird error 1 
npm ERR! not ok code 0

我不确定这一切是什么意思!非常感激任何帮助!例如如何在pkg_config_path环境变量中创建mkdir cairo pc?


看看这个是否有帮助:https://github.com/LearnBoost/node-canvas/issues/225 - user1693593
啊,谢谢Ken。我按照这个做了,但现在出现了这个错误:CXX(target) Release/obj.target/canvas/src/Canvas.o 在../src/Canvas.cc中包含文件时: ../src/Canvas.h:19:10: 致命错误:找不到'cairo/cairo.h'文件 #include <cairo/cairo.h> - plimbs
10个回答

199

我曾经遇到过同样的问题,@Epistemex的链接帮助我解决了它。

......你需要安装libcairo2-devlibjpeg-devlibgif-dev软件包......

sudo apt-get install libcairo2-dev libjpeg-dev libgif-dev

15
我还需要安装pangocairo软件包,解决方法是使用sudo apt-get install libpango1.0-dev命令。 - Adlen Afane
这在亚马逊EC2实例中不起作用,因为它们不是Debian系统。有人知道这个的yum命令吗? - Max
6
cairo-devellibjpeg-develgiflib-devel是亚马逊Linux的软件包。@Max - Stephen Reid
2
@AdlenAfane的评论对于那些想要安装'manim'的人非常相关。 - LucasBr

72

我在Mac上也遇到了同样的问题,所以我尝试了以下步骤,然后找到了解决方法。

Mac OSX版本>=10.7.5 node -v = v0.8.12

$ brew install cairo
$ pkg-config --atleast-version=1.12.2 cairo
$ echo $?

如果它返回1,您需要设置PKG_CONFIG_PATH环境变量,以便可以找到cairo.pc和fontconfig.pc

$ locate cairo.pc
$ export PKG_CONFIG_PATH=/usr/X11/lib/pkgconfig/

再次运行 pkg-config ...

$ pkg-config --atleast-version=1.12.2 cairo

$ echo $?

如果返回0,那么一切都很好。

$ npm install canvas

1
感谢您的关注细节,非常好。 - neelmeg
1
感谢您使用Mac/brew提供的指针。在Mac上,如果您正在使用macports,那么这对我有用:$ sudo port install cairo $ sudo port install pkgconfig # 不确定这个是否是必需的... :/ $ npm install canvas - DerekC
如果在运行export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/之后,它仍然返回1怎么办? - Chase Roberts

32

在安装qrcode软件包时,我在OS X 10.11.2上遇到了同样的问题。

通过安装以下软件包解决了该问题:

brew install cairo
brew install pkg-config
xcode-select --install

4
在我的情况下(macOS Sierra 10.12.1),只需执行“brew install cairo”即可。 - sakisk
1
在全新安装的macOS Sierra 10.12(恢复)中,只需要执行brew install cairo即可,可以确认一下。 - Kulbear
2
看起来 brew install cairo 会自动安装 pkg-config - jacoballenwood

15

如果还有人遇到这个问题并找到了这个页面,以下方法适用于CentOS 6.6:

sudo yum install cairo cairo-devel

基本上解决方案是你需要安装开发包和常规包(最佳答案在Ubuntu中执行相同操作-每个发行版可能不同)。


9

我按照 @Piyush 给出的步骤进行了操作,但需要再加一步才能使其正常运行。 我正在使用OS X 10.14.5。

所以我是按照以下步骤操作的:

brew install pkg-config
brew install cairo
pkg-config --atleast-version=1.12.2 cairo
export PKG_CONFIG_PATH=/usr/X11/lib/pkgconfig/
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:/usr/local/opt/libffi/lib/pkgconfig"
npm install canvas


5

在Mac上尝试这个:

brew install pkg-config cairo pango libpng jpeg giflib

这对我很有效!谢谢!我使用的是运行OSX 12.6、node v18.12.1和npm 8.19.3的m2 MacBook Air。 - optimus_prime

5

对于Ubuntu系统,以下是相关的命令。此外,这里有参考资料

$ sudo apt-get update 
$ sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev 

3

如果您使用apt-get,那么接受的答案就可以了。对于YUM/DNF用户(Fedora,CentOS和其他类似RHEL的系统),请使用以下命令:

yum install cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel

2
当我遇到这个问题时,问题在于我的路径上的pkg-config版本是由chefdk提供的版本,而不是homebrew安装的版本。
$ which pkg-config
/usr/local/bin/pkg-config

$ eval "$(chef shell-init bash)"
$ which pkg-config
/opt/chefdk/embedded/bin/pkg-config

解决方案是从我的bash配置文件中删除eval "$(chef shell-init bash)"条目。
有关在Github上讨论chefdk路径生成问题的更多信息,请访问https://github.com/chef/chef-dk/issues/313

1
我只需要在OSX 10.10.4上安装pkg-config。 brew install pkg-config

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接