Я пытаюсь установить Sharp на Ubuntu 16.04 LTS.
У меня изначально випов не было, поэтому установил
sudo apt-get install libvips-dev
Это устранило первую ошибку, но теперь я получаю еще одну ошибку, на которой застрял:
In file included from ../src/common.cc:25:0:
/usr/include/vips/vips8:35:25: fatal error: glib-object.h: No such file or directory
compilation terminated.
sharp.target.mk:115: recipe for target 'Release/obj.target/sharp/src/common.o' failed
make: *** [Release/obj.target/sharp/src/common.o] Error 1
make: Leaving directory '/home/rachel/node_modules/sharp/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/share/node-gyp/lib/build.js:269:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 4.15.0-36-generic
gyp ERR! command "/usr/bin/nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /home/rachel/node_modules/sharp
gyp ERR! node -v v4.2.6
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
Итак, я выяснил, к какому пакету принадлежит glib-object.h, и попытался установить его, но он уже был установлен. На самом деле файл существует.
/usr/include/glib-2.0/glib-object.h
После долгого просмотра я нашел аналогичный вопрос, в котором они спрашивали, было ли расположение заголовка в pkg-config --cflags vips-cpp. Для спрашивающего это не так, и это привело к исправлению, но для меня это так (второй снизу).
> pkg-config --cflags vips-cpp
-pthread -fopenmp -DMAGICKCORE_HDRI_ENABLE=0
-DMAGICKCORE_QUANTUM_DEPTH=16
-fopenmp -DMAGICKCORE_HDRI_ENABLE=0
-DMAGICKCORE_QUANTUM_DEPTH=16 -I/usr/include/libgsf-1
-I/usr/include/libxml2
-I/usr/include/x86_64-linux-gnu//ImageMagick-6
-I/usr/include/ImageMagick-6
-I/usr/include/x86_64-linux-gnu//ImageMagick-6
-I/usr/include/ImageMagick-6
-I/usr/include/orc-0.4
-I/usr/include/OpenEXR
-I/usr/include/openslide
-I/usr/lib/x86_64-linux-gnu/hdf5/serial/include
-I/usr/include/pango-1.0
-I/usr/include/harfbuzz
-I/usr/include/pango-1.0
-I/usr/include/freetype2
-I/usr/include/x86_64-linux-gnu
-I/usr/include/libpng12
-I/usr/include/libexif
-I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include
Я не нашел никаких решений, убедившись, что файл существует и его папка включена в вышеприведенный вывод. Я совершенно не знаю, что делать дальше, поэтому буду благодарен за любой совет.
npm - это новая установка (по состоянию на вчерашний день), если это имеет значение.
Спасибо всем. В конце концов я решил просто обновить свою ОС, которая все исправила. Я не могу проверить, что бы сработало, чтобы исправить это без обновления, но я пришел к выводу, что используются старые библиотеки, которые не поддерживаются.
Похоже, что vips-cpp ищет GObject, а не GLib, но файл pkg-config запрашивает только GLib. GObject основан на GLib, и они тесно связаны, но являются нет одним и тем же проектом.
Вы должны каким-то образом добавить gobject-2.0
в зависимости pkg-config. Вы можете сделать это в системе строгой сборки (где бы она ни находилась в пакете vips-cpp
, она также должна зависеть от gobject-2.0
). Вы также можете исправить свой файл pkg-config vips-cpp
, чтобы добавить gobject-2.0
в качестве зависимости; где находится файл, зависит от вашей архитектуры, а это $LIBDIR/pkg-config/vips-cpp.pc
.
Привет, я сопровождаю libvips. vips-cpp.pc запрашивает gobject: github.com/jcupitt/libvips/blob/master/vips-cpp.pc.in#L9, поэтому я думаю, что все в порядке.
OP работает под управлением старой версии Ubuntu; возможно у него есть версия libvips от до того, как был добавлен gobject-2.0?
Да, правда, OP не собирался из исходников, они используют дистрибутив libvips. Он будет древним. Я также займусь докером с более новым узлом.
У меня была такая же проблема в ubuntu 18.04, node 12.x, но я смог исправить ее, собрав libvips из исходного кода.
У вас есть две проблемы (я думаю): во-первых, nodejs
, поставляемый с Ubuntu 16.04, имеет версию 4.x, которая перестала поддерживаться еще в апреле 2018 года - текущий поддерживаемый nodejs
- 8.x. Во-вторых, libvips
, поставляемый с Ubuntu 16.04, также устарел и плохо работает с текущим sharp
.
К счастью, исправить это просто: с nodejs
6, 8 и 10 sharp
автоматически загрузит для вас двоичный файл libvips
.
Я использовал это руководство для установки nodejs
8:
Тогда просто:
npm install sharp
И все заработало. Вот он как Dockerfile
, для справки:
https://github.com/jcupitt/docker-builds/blob/master/sharp-ubuntu16.04/Dockerfile
У меня была такая же проблема. А для меня я решил, скомпилировав libvips с официального гитхаба. Вот инструкция: https://libvips.github.io/libvips/install.html
git clone git://github.com/jcupitt/libvips.git
cd libvips/
# install dependencies if you have errors during autogen.sh
#sudo apt install gtk-doc-tools
#sudo apt install gobject-introspection
./autogen.sh
make
sudo make install
После решения проблемы glib-object.h вы можете столкнуться с другой ошибкой: libvips-cpp.so.42: невозможно открыть файл общих объектов: нет такого файла или каталога
Это можно решить, выполнив одну команду:
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/usrlocal.conf'
Sharp должен включить двоичный файл libvips в Ubuntu 14.04+, см. Sharp.pixelplumbing.com/en/stable/install ... все, что вам нужно, это
npm install sharp
. Я бы удалил Ubuntu libvips и снова попробовал установить Sharp из npm.