You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As a result of nodejs/node#14785 and nodejs/help#784 we have discovered that a backwards incompatible change was made in libstdc++ AIX between gcc 4.8 and gcc 4.9. This means that the requirement for GCC 4.9.3 for Node 8 requires that we raise the minimum gcc/libstdc++ version for that platform. Ideally we should do this before Node 8 goes LTS, or stick with gcc 4.8.4 for 8.x.
AIX is a special case here, because it doesn't come with libstdc++ or gcc by default, so everyone running on the platform needs to install gcc in order to run Node. There are two places to get gcc versions, the AIX Toolbox and Bull Freeware. Currently the AIX toolbox only has GCC 6.3.0 available, and Bull Freeware has 7.2.0, 6.4.0, and 5.5.0 (and older minor versions).
It's worth noting at this point that gcc changed their versioning scheme after 4.9, so 4.10 became 5.0, and 4.11 became 6.0. So the gap between 4.9 and 7.0 is not as large as it seems.
Given that AIX users have to download gcc anyway, and given that they will have to update their gcc levels for this release, I think we should bump to a relatively new version (so they don't have to upgrade again for as long as possible). I'd suggest using 6.3.0, GCC 7 came out this year, so might be too new to move to.
We'll need to have both the existing version of gcc (to build older node versions) as well as the newer version and figure out how to make them co-exist.
@gibfahn Any progress on this? Any way I can help?
We'll need to have both the existing version of gcc (to build older node versions) as well as the newer version and figure out how to make them co-exist.
Is it not possible to run node built with gcc 4.9 on AIX with gcc 4.8 installed?
I am receiving the same error on AIX 7.1 while while verifying node ibm-8.9.4.0-node-v8.9.4-aix-ppc64.bin installation. Is there now a fix for the problem? Thanks.
oracle@stpisa02sa:/opt/freeware/lib/pthread/ppc64/ [] node --version
exec(): 0509-036 Cannot load program node because of the following errors:
0509-130 Symbol resolution failed for node because:
0509-136 Symbol ZNKSt9type_infoeqERKS (number 359) is not exported from
dependent module /opt/freeware/lib/pthread/ppc64/libstdc++.a[libstdc++.so.6].
0509-192 Examine .loader section symbols with the
'dump -Tv' command.
@gibfahn - no, not gcc 4.8. I have gcc 6.3.0. What is the suggestion workaround? Deinstall gcc6.3.0 and install gcc 4.8?
oracle@stpisa02sa:/opt/freeware/lib/pthread/ppc64/ [] gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/freeware/libexec/gcc/powerpc-ibm-aix7.1.0.0/6.3.0/lto-wrapper
Target: powerpc-ibm-aix7.1.0.0
Configured with: ../gcc-6.3.0/configure --prefix=/opt/freeware --mandir=/opt/freeware/man --infodir=/opt/freeware/info --with-local-prefix=/opt/freeware --with-as=/usr/bin/as --with-ld=/usr/bin/ld --enable-languages=c,c++,fortran,objc,obj-c++ --enable-version-specific-runtime-libs --disable-nls --enable-decimal-float=dpd --with-cloog=no --with-ppl=no --disable-libstdcxx-pch --enable-__cxa_atexit --host=powerpc-ibm-aix7.1.0.0
Thread model: aix
gcc version 6.3.0 (GCC)
oracle@stpisa02sa:/opt/freeware/lib/pthread/ppc64/ [] lslpp -Lq | grep c++
libstdc++ 6.3.0-1 C R GNU Standard C++ Library
oracle@stpisa02sa:/opt/freeware/lib/pthread/ppc64/ [] lslpp -Lq | grep gcc
gcc 6.3.0-1 C R GNU Compiler Collection
gcc-cpp 6.3.0-1 C R The C Preprocessor (/bin/rpm)
libgcc 6.3.0-1 C R GCC version 6.3.0 shared
@gibfahn - no, not gcc 4.8. I have gcc 6.3.0. What is the suggestion workaround? Deinstall gcc6.3.0 and install gcc 4.8?
Unfortunately you will need 4.8. However you should be able to have them both installed side-by-side. I've heard this is possible but haven't confirmed it myself, that's in fact the point of this issue.
@seawatcher2011 your mileage may vary, but what worked for me is to extract the contents of the libstdc++ rpm into a directory, then set the LIBPATH to point to that directory.
I used rpm2cpio to extract the rpm, which isn't available on AIX (I got it from a RHEL box, but I think it's available on Ubuntu).
So first you need to download the rpm from wherever you got gcc from, either AIX Toolbox or Bull Freeware. Either should work, but you can't mix and match.
AIX Toolbox: ftp://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-6.1/gcc/libstdcplusplus-4.8.5-1.aix6.1.ppc.rpm
Bull Freeware: I can't get a direct link, but for AIX 6.1 the file is libstdc++-4.8.4-6.aix6.1.ppc.rpm
You extract the file (on a different machine) with:
I have generated a zip file containing gcc and dependencies, by downloading the zip from Bull Freeware. For some reason the dependency resolver on Bull Freeware downloaded the wrong version of libstdc++ (7.1 instead of 6.1) so I had to manually fix up the with-deps zip.
#!/bin/bash -ex# Builds a zip file containing gcc and dependencies, installed from Bull Freeware rpms.
rm -rf rpms gcc-6.3.0-1
rm -f gcc-6.3.0-1.zip
mkdir rpms gcc-6.3.0-1
cp gcc-c++-6.3.0-1.aix6.1.ppc.rpm-with-deps.zip rpms
(cd rpms && unzip gcc-c++-6.3.0-1.aix6.1.ppc.rpm-with-deps.zip)
forrpmin rpms/*.rpm;do
(cd gcc-6.3.0-1 && rpm2cpio ../$rpm| cpio -idmv)
done
zip -r gcc-6.3.0-1.zip gcc-6.3.0-1/
Once you have the zip on the system, it's just a matter of unzipping it somewhere, and then setting up the paths correctly, so:
# Setting the LIBPATH doesn't seem to be necessary.# export LIBPATH="$PWD/gcc-6.3.0-1/opt/freeware/lib/pthread/ppc64:$PWD/gcc-6.3.0-1/opt/freeware/lib"export PATH="$PWD/gcc-6.3.0-1/opt/freeware/bin:$PATH"cd~/node
export CC=`which gcc` CXX=`which g++` CXX_host=`which g++`
./configure --dest-cpu=ppc64 && gmake -j4
No idea and in fact even copying over the gmake to the community machine did not help as I tried that first. It is different though based on the output from dump -H
The upgrade has now been rolled out to test and release machines. Things seem to be building ok.
Have a suggestion from AIX team on how to improve the config, will do that but likely after 10.x goes out.
We ran into one more problem. Turns out there were a few non-relative symbolic links and the process documented above resulted in those being missing in the deployed compilers.
We've talked to the AIX teams about fixing them so they are relative and have fixed up the links on the community machines with:
I think its still a thing. I've notes somewhere, I think we are still working on it, slowly. I'll check with @mhdawson again when he's back from vacation.
Activity
mhdawson commentedon Oct 19, 2017
We'll need to have both the existing version of gcc (to build older node versions) as well as the newer version and figure out how to make them co-exist.
I'm +1 for going with 6.3.0
seishun commentedon Dec 1, 2017
@gibfahn Any progress on this? Any way I can help?
Is it not possible to run node built with gcc 4.9 on AIX with gcc 4.8 installed?
gibfahn commentedon Dec 14, 2017
Unfortunately not, you need the right version of
libstdc++.seawatcher2011 commentedon Feb 8, 2018
I am receiving the same error on AIX 7.1 while while verifying node ibm-8.9.4.0-node-v8.9.4-aix-ppc64.bin installation. Is there now a fix for the problem? Thanks.
oracle@stpisa02sa:/opt/freeware/lib/pthread/ppc64/ [] node --version
exec(): 0509-036 Cannot load program node because of the following errors:
0509-130 Symbol resolution failed for node because:
0509-136 Symbol ZNKSt9type_infoeqERKS (number 359) is not exported from
dependent module /opt/freeware/lib/pthread/ppc64/libstdc++.a[libstdc++.so.6].
0509-192 Examine .loader section symbols with the
'dump -Tv' command.
gibfahn commentedon Feb 8, 2018
@seawatcher2011 do you have gcc 4.8 installed? See nodejs/node#14785 for more info.
seawatcher2011 commentedon Feb 8, 2018
@gibfahn - no, not gcc 4.8. I have gcc 6.3.0. What is the suggestion workaround? Deinstall gcc6.3.0 and install gcc 4.8?
gibfahn commentedon Feb 11, 2018
Unfortunately you will need 4.8. However you should be able to have them both installed side-by-side. I've heard this is possible but haven't confirmed it myself, that's in fact the point of this issue.
gibfahn commentedon Apr 12, 2018
I have now managed to get this working, but there was one pain point.
On one machine I tested on I got this error persistently, implying that the
LIBPATHwasn't being passed down to theg++call.With @refack's help I eventually tracked this down to this mailing list discussion:
https://lists.gnu.org/archive/html/bug-make/2001-03/msg00067.html
Running
sudo chmod 755 /opt/freeware/bin/makedid indeed resolve the issue.The
setuidbit is not set in thetestorreleasemachines (although it was on the machine I was using to test).gibfahn commentedon Apr 13, 2018
@seawatcher2011 your mileage may vary, but what worked for me is to extract the contents of the libstdc++ rpm into a directory, then set the LIBPATH to point to that directory.
I used rpm2cpio to extract the rpm, which isn't available on AIX (I got it from a RHEL box, but I think it's available on Ubuntu).
So first you need to download the rpm from wherever you got gcc from, either AIX Toolbox or Bull Freeware. Either should work, but you can't mix and match.
AIX Toolbox: ftp://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-6.1/gcc/libstdcplusplus-4.8.5-1.aix6.1.ppc.rpm
Bull Freeware: I can't get a direct link, but for AIX 6.1 the file is
libstdc++-4.8.4-6.aix6.1.ppc.rpmYou extract the file (on a different machine) with:
rpm2cpio libstdcplusplus-4.8.5-1.aix6.1.ppc.rpm | cpio -idmvThen zip it up and scp it to the machine. Unzip it, and then add the
opt/freeware/lib/pthread/ppc64subdirectory to yourLIBPATHYou should then be able to do
ldd ./nodeand./nodeand it should all work.Note that Node 10 is expected to be built with gcc 6.3, so you won't need this workaround once you upgrade to that version.
For info, the reason this is necessary is because there was a breaking change in libstdc++ on AIX between gcc 4.8 and 4.9.
Let me know if it works!
gibfahn commentedon Apr 13, 2018
I have generated a zip file containing gcc and dependencies, by downloading the zip from Bull Freeware. For some reason the dependency resolver on Bull Freeware downloaded the wrong version of libstdc++ (7.1 instead of 6.1) so I had to manually fix up the with-deps zip.
Once you have the zip on the system, it's just a matter of unzipping it somewhere, and then setting up the paths correctly, so:
The version I generated is stored at https://ci.nodejs.org/downloads/aix/ (see #871 (comment)), there's a zip and an md5sum for checking that everything downloads correctly.
gibfahn commentedon Apr 13, 2018
I also ran with C++ 14 enabled to make sure that worked, by applying this diff:
seishun commentedon Apr 13, 2018
'-std=gnu++1y'and'-std=gnu++14'are synonyms.gibfahn commentedon Apr 13, 2018
Ahh, so how would I enable gcc 14 features (to check that it works)? I want to get something that fails on 4.8.4 and passes on 6.3.0.
16 remaining items
mhdawson commentedon Apr 16, 2018
Running here: https://ci.nodejs.org/job/node-test-commit-aix-mdawson/nodes=aix61-ppc64-x/10/
gibfahn commentedon Apr 17, 2018
Do you know why the gmake on the test machines is different to the one on
dal-pax?mhdawson commentedon Apr 17, 2018
No idea and in fact even copying over the gmake to the community machine did not help as I tried that first. It is different though based on the output from dump -H
BethGriggs commentedon Apr 19, 2018
@gibfahn,
dal-paxis 6100-07, IIRC the community CI AIX machines (https://ci.nodejs.org/label/aix61-ppc64/) are both 6100-09. Maybe that is why we're seeing differences?mhdawson commentedon Apr 19, 2018
The upgrade has now been rolled out to test and release machines. Things seem to be building ok.
Have a suggestion from AIX team on how to improve the config, will do that but likely after 10.x goes out.
doc: update required compiler level for AIX
doc: update required compiler level for AIX
doc: update required compiler level for AIX
mhdawson commentedon May 10, 2018
We ran into one more problem. Turns out there were a few non-relative symbolic links and the process documented above resulted in those being missing in the deployed compilers.
We've talked to the AIX teams about fixing them so they are relative and have fixed up the links on the community machines with:
The updated fixed binary is in the downloads directory on the ci machine as:
V2-gcc-6.3.0-1.tar.gzThe next step is to update the manual install steps for AIX.
Trott commentedon Apr 25, 2019
This is almost a year inactive at this point. Is it still a thing or has this been addressed and can be closed? @mhdawson @nodejs/platform-aix
sam-github commentedon Apr 25, 2019
I think its still a thing. I've notes somewhere, I think we are still working on it, slowly. I'll check with @mhdawson again when he's back from vacation.
mhdawson commentedon Apr 26, 2019
The remaining stuff I think is to update the manual install steps for AIX and then it can be closed.
AshCripps commentedon Nov 15, 2019
@mhdawson is this the updated install steps you mentioned - https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-aix.
If so, can this issue be closed?
mhdawson commentedon Nov 21, 2019
I'm ok with closing.