lwip: Failed to install with node7: ZLIB_VERNUM != PNG_ZLIB_VERNUM

Today I tried to install lwip on ubuntu 16.04 and I get this error during the compilation phase:

   CC(target) Release/obj.target/lwip_decoder/src/lib/png/png.o
 In file included from ../src/lib/png/png.c:14:0:
 ../src/lib/png/pngpriv.h:805:4: error: error ZLIB_VERNUM != PNG_ZLIB_VERNUM "-I (include path) error: see the notes in pngpriv.h"
  #  error ZLIB_VERNUM != PNG_ZLIB_VERNUM \
lwip_decoder.target.mk:165: recipe for target 'Release/obj.target/lwip_decoder/src/lib/png/png.o' failed

Am I missing something?

About this issue

  • Original URL
  • State: open
  • Created 7 years ago
  • Reactions: 78
  • Comments: 41

Commits related to this issue

Most upvoted comments

I have manually tested a range of Node versions:

4.6.2 OK (used in Meteor 1.4)
4.8.4 NOT OK (used in Meteor 1.5.1)
6.10.0 OK
6.10.1 OK
6.10.2 NOT OK
7.3.0 OK
7.4.0 OK
7.5.0 OK
7.6.0 NOT OK
7.7.0 NOT OK
7.8.0 NOT OK
7.10.0 NOT OK

Hope this helps someone. Using a Node version manager you can install this using a working version on the same major version as you are currently using, and then after installing it, switch back to latest version of that major version.

P.S. An easier option might be to simply use a image manipulation library written solely in javascript. See below.

– edit on July 19: added Node versions used in Meteor edit on Nov 3: added comment to a patch to replace with jimp

Finally I solve my problem replacing lwip for pajk-lwip.

I have the exact same error using lwip v0.0.9 with Node v6.10.2 and npm version 4.4.4. I can’t understand what is wrong.

+1 in node 7, In node 6 works fine! Thanks @ajuste

For the benefit of anyone else in search of a solution, your best bet may be to give jimp a try. It has a similar (and sometimes simpler) API, with zero external dependencies, so no more struggling with node-gyp.

https://www.npmjs.com/package/jimp

It works also in version 6.10.1 or less. The problem is in version 6.10.2.

I have this issue in node 6.10.2

Hello from 2020 where this issue is still actual

This issue could be resolved by installing graphicsmagick locally. See graphicsmagick for more info

the matching zlib is included from my local node-gyp version (there are different node-gyp version in %USERPROFILE%/./node-gyp . The node-gyp version 4.4.2 has the right ZLIB_VERNUM=0x1280 in zlib.h. I could solve the problem by specficing a target version for node-gyp via commandline: SET NPM_CONFIG_TARGET=v4.4.2 npm config set target=v4.4.2 --global npm install --global sprity

@edittler save my day. Have macOS 10.12.4 and I’m able to install it without error using node v6.0.0, but get the same error on node v6.10.2 and v.7.8.0.

If you are using it on sprity-lwip extension I’ve done this extension https://github.com/xcaliber-tech/sprity-jimp using jimp instead

v7.9.0 ~/home/slava/.node-gyp/7.9.0/include/node/zlib.h #define ZLIB_VERSION "1.2.11" #define ZLIB_VERNUM 0x12b0 #define ZLIB_VER_REVISION 11 #define ZLIB_VERNUM 0x12b0 v6.9.1 #define ZLIB_VERSION "1.2.8" #define ZLIB_VERNUM 0x1280 #define ZLIB_VER_REVISION 8 #define ZLIB_VERNUM 0x1280

lwip/src/decoder/pnglibconf.h #define PNG_ZLIB_VERNUM 0x1280

lwip/src/lib/png/pngpriv.h if PNG_ZLIB_VERNUM != 0 && PNG_ZLIB_VERNUM != ZLIB_VERNUM error ZLIB_VERNUM != PNG_ZLIB_VERNUM \ "-I (include path) error: see the notes in pngpriv.h"

If you change the version of zlib to 0x12b0 in pnglibconf.h, then the project is compiled. And the tests are executed without errors.

It works, but it’s not right … Probably you need to connect the zlib directory from the project instead of the node directory.

Changing the lwip version in package.json to the development branch of this package solved the issue in Node v6.10.2:

Change the use of version 0.0.9 to https://github.com/Pajk/lwip#development

Node 7.4 and earlier is also working for me, 7.8 not. Haven’t tried other versions in between, yet.

Hello from 2020 where this issue is still actual

Hello from 2023

Ok so for anyone having the same issues on Osx and having problems figuring this issue out with homebrew.

I’m on OSX and using brew to manage my packages but that didn’t work, I switched to NVM. Here is what I did:

I uninstalled Node from Brew because it only allows you to install: node@4, node@6, node@8 and a few others.

Then I installed NPM (node package manager) and pulled in Node 7.5.0 as suggested by @fatso83 with: nvm install v7.5.0

Just a follow up to my comment above: if all you care about is actually getting your image manipulation working in a short amount of time, you could just replace lwip with the pure-js jimp library. This will avoid all the noise from node-gyp forever. jimp has almost the same API, and my entire diff was like this:

Click to display diff
commit 105c81da3230d2b985afdd087583ac0fc8303bce
Author: Carl-Erik Kopseng <carlerik@myemployer.com>
Date:   Fri Jul 21 01:55:18 2017 +0200

    Use JIMP instead of LWIP for image resize
    
    closes #330
    
    Rids us of at least one case of node-gyp.

diff --git a/imports/startup/lib/methods/util/ImageUtil.js b/imports/startup/lib/methods/util/ImageUtil.js
index 84bc13e..18e83a4 100644
--- a/imports/startup/lib/methods/util/ImageUtil.js
+++ b/imports/startup/lib/methods/util/ImageUtil.js
@@ -6,33 +6,27 @@ export default {
       throw new Meteor.Error('ImageUtils.resize() can only be called on the server!');
     }
 
+    const Jimp = Npm.require('jimp');
     const dataURIRegex = /^data:.+\/(.+);base64,(.*)$/;
 
     function resize(img) {
-      const width = img.width();
-      const height = img.height();
+      const width = img.bitmap.width;
+      const height = img.bitmap.height;
 
       const isLandscape = width > height;
       const newWidth = isLandscape ? maxDim : (maxDim / height) * width;
       const newHeight = isLandscape ? (maxDim / width) * height : maxDim;
-      img.resize(newWidth, newHeight, 'lanczos', (err, resizedImage) => {
-        if (err) {
-          Logger.error('Error resizing to thumbnail!', err);
-        } else {
-          encodeToBase64DataURI(resizedImage);
-        }
-      });
-    }
 
-    function encodeToBase64DataURI(img) {
-      img.toBuffer('jpg', {quality: 80}, (err, resizedBuffer) => {
-        if (err) {
-          Logger.error('Error writing thumbnail to buffer!', err);
-        } else {
-          const base64Thumbnail = new Buffer(resizedBuffer, 'binary').toString('base64');
-          onDone('data:image/jpeg;base64,' + base64Thumbnail);
-        }
-      });
+      img.resize(newWidth, newHeight)
+        .quality(70)
+        .getBase64(Jimp.MIME_JPEG, (err, base64Thumbnail) => {
+          if(err) {
+            Logger.error('resize error', err);
+            throw err;
+          }
+
+          onDone(base64Thumbnail);
+        });
     }
 
     function getBase64ImageDataFromDataURI(dataURI) {
@@ -43,8 +37,7 @@ export default {
     }
 
     if (dataURIRegex.test(dataURIImage)) {
-      const lwip = Npm.require('lwip');
-      lwip.open(getBase64ImageDataFromDataURI(dataURIImage), 'jpg', (err, img) => {
+      Jimp.read(getBase64ImageDataFromDataURI(dataURIImage), (err, img) => {
         if (err) {
           Logger.error('Error opening image from buffer', err);
         } else {
diff --git a/package.json b/package.json
index 9d538c8..fd4de82 100644
--- a/package.json
+++ b/package.json
@@ -33,8 +33,8 @@
     "deep-extend": "^0.4.1",
     "fibers": "^1.0.14",
     "iconv": "^2.2.1",
+    "jimp": "^0.2.28",
     "lodash": "^4.14.1",
-    "lwip": "^0.0.9",
     "material-ui": "^0.16.7",
     "message-box": "latest",
     "meteor-node-stubs": "^0.2.3",

Ok, so I updated to node 8.11.1 on Windows so that I could get lwip to compile with Visual Studio 2017, only to find that now while the compiler gets invoked, there is this error…

@fatso83, thanks for posting results for different node-versions! This saved me lots of time!

Hi,

Waiting for a new version of this lib too. I have the same probleme with the last version of node 6