GNU bug report logs - #59393
[node] node-gyp dependent packages may not work correctly due to node-lts ld.so.cache

Previous Next

Package: guix;

Reported by: Abhishek Cherath <abhi <at> quic.us>

Date: Sun, 20 Nov 2022 00:07:01 UTC

Severity: normal

To reply to this bug, email your comments to 59393 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#59393; Package guix. (Sun, 20 Nov 2022 00:07:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Abhishek Cherath <abhi <at> quic.us>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Sun, 20 Nov 2022 00:07:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Abhishek Cherath <abhi <at> quic.us>
To: bug-guix <at> gnu.org
Subject: [node] node-gyp dependent packages may not work correctly due to
 node-lts ld.so.cache
Date: Sat, 19 Nov 2022 19:06:24 -0500
Hello,

This is a fairly involved bug report, the basic idea is that several npm 
packages depend on [node-gyp](https://www.npmjs.com/package/node-gyp), 
which is a build tool (written in python) that compiles native plugins 
for nodejs (so generally C/C++ code).

This tool uses the *system* C/C++ compiler, so on a guix system with 
gcc-toolchain, that would be gcc-12. this allows for the compilation and 
installation of these packages in node_modules fine. However, at runtime 
(which happens as `node program.js`) since the dynamic linker looks in 
the node-lts package's ld.so.cache, it tries to link against gcc-10's 
libstdc++.so.6, and errors out because of missing symbols.

To Reproduce, attempt the following (this isn't a particularly minimal 
example)
1.  guix shell --pure gcc-toolchain libuv mesa make python2 pkg-config 
libx11 libxext libxi node
2. cd <<SOME-DIR>>
3. CC=gcc npm i gl
4.  guix shell gcc-toolchain libuv mesa make python2 pkg-config libx11 
libxext libxi node
5. echo "var gl = require('gl')(64, 64, { preserveDrawingBuffer: true 
})" > test.js
6. node test.js

observe "ERR_DLOPEN_FAILED", with Error: 
/gnu/store/094bbaq6glba86h1d4cj16xhdi6fk2jl-gcc-10.3.0-lib/lib/libstdc++.so.6: 
version `GLIBCXX_3.4.29' not found

running with LD_DEBUG=all, shows that node-14.19.3's linked gcc's 
libstdc++ is used:

3608:     find library=libstdc++.so.6 [0]; searching
3608:      search 
cache=/gnu/store/mgxvqphymkf1xfz4zryppr1jwnd5xcyw-node-14.19.3/etc/ld.so.cache
3608:       trying 
file=/gnu/store/094bbaq6glba86h1d4cj16xhdi6fk2jl-gcc-10.3.0-lib/lib/libstdc++.so.6


I'm not really certain how one would go about solving this tbh, I'm 
planning to look a little deeper into how node-gyp decides what C++ 
compiler to use, might be a matter of setting some env vars or 
something? any ideas are appreciated.

Thank you,
Abhishek.




This bug report was last modified 1 year and 166 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.