作为背景,我对软件构建系统、Unix (在本例中使用Debian 11 )和Python环境有丰富的知识,但对现代Ruby环境几乎一无所知。
我想在一个朋友的博客上写一篇用Jekyll构建的文章,所以我想让他的博客构建在我的系统上。我希望尽量减少我在使用系统包时带来的Ruby内容,所以我使用bundle install --path vendor/bundle来设置项目依赖项,其中包括rmagick gem。
我已经安装了libmagickcore-6.q16-dev包,这给了我/usr/include/ImageMagick-6/wand/MagickWand.h。但是,邦德勒无法安装RMagick 2.16.0GEM。
在vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/rmagick-2.16.0/mkmf.log中,这似乎是失败的原因:
have_header: checking for wand/MagickWand.h... -------------------- no
"x86_64-linux-gnu-gcc -E -I/usr/include/x86_64-linux-gnu/ruby-2.7.0 -I/usr/include/ruby-2.7.0/ruby/backward -I/usr/include/ruby-2.7.0 -I. conftest.c -o conftest.i"
conftest.c:3:10: fatal error: wand/MagickWand.h: No such file or directory
3 | #include <wand/MagickWand.h>
| ^~~~~~~~~~~~~~~~~~~
compilation terminated.没有进行广泛的进一步调查,我猜这是因为包含路径不正确。这类提示提示RMagick创业板正在崩溃,因为pkg-config确实提供了以下内容:
$ pkg-config --cflags MagickCore
-fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -I/usr/include/x86_64-linux-gnu//ImageMagick-6 -I/usr/include/ImageMagick-6我无法升级他正在使用的Gems,甚至也不能很容易地测试我可能对系统所做的任何更改在他正在使用的系统上的工作。因此,为了解决这个问题,我想让bundle添加-I /usr/include/ImageMagick-6 (或者做道德上的等价物)。
让这一切发生的最好方法是什么?为此,我没有看到bundle命令行选项。也许我可以设置一个环境变量?
发布于 2022-05-18 05:02:45
事实证明,RMagick使用的是正确的包含路径,尽管这些路径没有显示在上面的mkmf.log文件中。问题是我实际上没有包含文件本身,尽管pkg-config --cflags MagickCore给出了wand/子目录的路径。
我已经安装了Debian11包libmagickcore-6.q16-dev,它提供了MagickCore.pc,是基于一个早期的错误,表明pkg-config MagickCore失败了。但是,RMagic包实际上需要由libmagickwand-6.q16-dev包提供的不同的库/标题集。安装之后,bundle似乎毫无困难地构建了RMagick gem。
在调试这个程序时,我确实遇到了一个GCC环境变量列表,似乎这里提到的C_INCLUDE_PATH解决了我上面发布的原始问题。但是,我现在还没有简单的方法来测试这个问题。
https://stackoverflow.com/questions/72283203
复制相似问题