`collect2: fatal error: cannot find 'ld'` compiling v5.2.0 on Alpine Linux
I'm getting this error when compiling Node.js v5.2.0 on Alpine Linux 3.2. This error does not occur with any version <= v5.1.1 – including all io.js versions.
Any idea what may have changed that could cause this, or how to fix it?
You can reproduce using Docker and running alpine:3.2
. The following packages have been installed:
$ apk add --update curl make gcc g++ python linux-headers paxctl libgcc libstdc++
After fetching the v5.2.0 source, here's the configure and make output:
$ ./configure --prefix=/usr
creating ./icu_config.gypi
{ 'target_defaults': { 'cflags': [],
'default_configuration': 'Release',
'defines': [],
'include_dirs': [],
'libraries': []},
'variables': { 'asan': 0,
'gas_version': '2.25',
'host_arch': 'x64',
'icu_small': 'false',
'node_byteorder': 'little',
'node_enable_v8_vtunejit': 'false',
'node_install_npm': 'true',
'node_prefix': '/usr',
'node_release_urlbase': '',
'node_shared_http_parser': 'false',
'node_shared_libuv': 'false',
'node_shared_openssl': 'false',
'node_shared_zlib': 'false',
'node_tag': '',
'node_use_dtrace': 'false',
'node_use_etw': 'false',
'node_use_lttng': 'false',
'node_use_openssl': 'true',
'node_use_perfctr': 'false',
'openssl_fips': '',
'openssl_no_asm': 0,
'python': '/usr/bin/python',
'target_arch': 'x64',
'uv_parent_path': '/deps/uv/',
'uv_use_dtrace': 'false',
'v8_enable_gdbjit': 0,
'v8_enable_i18n_support': 0,
'v8_no_strict_aliasing': 1,
'v8_optimized_debug': 0,
'v8_random_seed': 0,
'v8_use_snapshot': 'true',
'want_separate_host_toolset': 0}}
creating ./config.gypi
creating ./config.mk
$ make -j4
make -C out BUILDTYPE=Release V=1
make[1]: Entering directory '/node-v5.2.0/out'
g++ -I../deps/gtest -I../deps/gtest/include -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /node-v5.2.0/out/Release/.deps//node-v5.2.0/out/Release/obj.target/gtest/deps/gtest/src/gtest-death-test.o.d.raw -c -o /node-v5.2.0/out/Release/obj.target/gtest/deps/gtest/src/gtest-death-test.o ../deps/gtest/src/gtest-death-test.cc
...
rm -f /node-v5.2.0/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a && ar crs /node-v5.2.0/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a /node-v5.2.0/out/Release/obj.target/v8_nosnapshot/gen/libraries.o /node-v5.2.0/out/Release/obj.target/v8_nosnapshot/gen/code-stub-libraries.o /node-v5.2.0/out/Release/obj.target/v8_nosnapshot/gen/experimental-libraries.o /node-v5.2.0/out/Release/obj.target/v8_nosnapshot/gen/extras-libraries.o /node-v5.2.0/out/Release/obj.target/v8_nosnapshot/deps/v8/src/snapshot/snapshot-empty.o
ln -f "/node-v5.2.0/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a" "/node-v5.2.0/out/Release/libv8_nosnapshot.a" 2>/dev/null || (rm -rf "/node-v5.2.0/out/Release/libv8_nosnapshot.a" && cp -af "/node-v5.2.0/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a" "/node-v5.2.0/out/Release/libv8_nosnapshot.a")
g++ '-DV8_TARGET_ARCH_X64' '-DENABLE_DISASSEMBLER' -I../deps/v8 -pthread -Wall -Wextra -Wno-unused-parameter -m64 -B/node-v5.2.0/third_party/binutils/Linux_x64/Release/bin -fno-strict-aliasing -m64 -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /node-v5.2.0/out/Release/.deps//node-v5.2.0/out/Release/obj.target/mksnapshot/deps/v8/src/snapshot/mksnapshot.o.d.raw -c -o /node-v5.2.0/out/Release/obj.target/mksnapshot/deps/v8/src/snapshot/mksnapshot.o ../deps/v8/src/snapshot/mksnapshot.cc
g++ -pthread -rdynamic -m64 -o /node-v5.2.0/out/Release/openssl-cli -Wl,--start-group /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/app_rand.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/apps.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/asn1pars.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ca.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ciphers.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/cms.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/crl.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/crl2p7.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dgst.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dh.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dhparam.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dsa.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dsaparam.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ec.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ecparam.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/enc.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/engine.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/errstr.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/gendh.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/gendsa.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/genpkey.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/genrsa.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/nseq.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ocsp.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/openssl.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/passwd.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkcs12.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkcs7.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkcs8.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkey.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkeyparam.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkeyutl.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/prime.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/rand.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/req.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/rsa.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/rsautl.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_cb.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_client.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_server.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_socket.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_time.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/sess_id.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/smime.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/speed.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/spkac.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/srp.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ts.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/verify.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/version.o /node-v5.2.0/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/x509.o /node-v5.2.0/out/Release/obj.target/deps/openssl/libopenssl.a -Wl,--end-group -ldl
g++ -pthread -rdynamic -m64 -fuse-ld=gold -B/node-v5.2.0/third_party/binutils/Linux_x64/Release/bin -m64 -o /node-v5.2.0/out/Release/mksnapshot -Wl,--start-group /node-v5.2.0/out/Release/obj.target/mksnapshot/deps/v8/src/snapshot/mksnapshot.o /node-v5.2.0/out/Release/obj.target/deps/v8/tools/gyp/libv8_base.a /node-v5.2.0/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a /node-v5.2.0/out/Release/obj.target/deps/v8/tools/gyp/libv8_libplatform.a /node-v5.2.0/out/Release/obj.target/deps/v8/tools/gyp/libv8_libbase.a -Wl,--end-group -ldl -lrt
collect2: fatal error: cannot find 'ld'
compilation terminated.
deps/v8/tools/gyp/mksnapshot.target.mk:139: recipe for target '/node-v5.2.0/out/Release/mksnapshot' failed
make[1]: *** [/node-v5.2.0/out/Release/mksnapshot] Error 1
make[1]: Leaving directory '/node-v5.2.0/out'
Makefile:45: recipe for target 'node' failed
make: *** [node] Error 2
For comparison, here's the same output compiling v5.1.1 on the same setup:
$ ./configure --prefix=/usr
creating ./icu_config.gypi
{ 'target_defaults': { 'cflags': [],
'default_configuration': 'Release',
'defines': [],
'include_dirs': [],
'libraries': []},
'variables': { 'asan': 0,
'gas_version': '2.25',
'host_arch': 'x64',
'icu_small': 'false',
'node_byteorder': 'little',
'node_install_npm': 'true',
'node_prefix': '/usr',
'node_release_urlbase': '',
'node_shared_http_parser': 'false',
'node_shared_libuv': 'false',
'node_shared_openssl': 'false',
'node_shared_zlib': 'false',
'node_tag': '',
'node_use_dtrace': 'false',
'node_use_etw': 'false',
'node_use_lttng': 'false',
'node_use_openssl': 'true',
'node_use_perfctr': 'false',
'openssl_fips': '',
'openssl_no_asm': 0,
'python': '/usr/bin/python',
'target_arch': 'x64',
'uv_parent_path': '/deps/uv/',
'uv_use_dtrace': 'false',
'v8_enable_gdbjit': 0,
'v8_enable_i18n_support': 0,
'v8_no_strict_aliasing': 1,
'v8_optimized_debug': 0,
'v8_random_seed': 0,
'v8_use_snapshot': 1,
'want_separate_host_toolset': 0}}
creating ./config.gypi
creating ./config.mk
$ make -j4
make -C out BUILDTYPE=Release V=1
make[1]: Entering directory '/node-v5.1.1/out'
g++ -I../deps/gtest -I../deps/gtest/include -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /node-v5.1.1/out/Release/.deps//node-v5.1.1/out/Release/obj.target/gtest/deps/gtest/src/gtest-death-test.o.d.raw -c -o /node-v5.1.1/out/Release/obj.target/gtest/deps/gtest/src/gtest-death-test.o ../deps/gtest/src/gtest-death-test.cc
...
rm -f /node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a && ar crs /node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a /node-v5.1.1/out/Release/obj.target/v8_nosnapshot/gen/libraries.o /node-v5.1.1/out/Release/obj.target/v8_nosnapshot/gen/code-stub-libraries.o /node-v5.1.1/out/Release/obj.target/v8_nosnapshot/gen/experimental-libraries.o /node-v5.1.1/out/Release/obj.target/v8_nosnapshot/gen/extras-libraries.o /node-v5.1.1/out/Release/obj.target/v8_nosnapshot/deps/v8/src/snapshot/snapshot-empty.o
ln -f "/node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a" "/node-v5.1.1/out/Release/libv8_nosnapshot.a" 2>/dev/null || (rm -rf "/node-v5.1.1/out/Release/libv8_nosnapshot.a" && cp -af "/node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a" "/node-v5.1.1/out/Release/libv8_nosnapshot.a")
touch /node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/v8_maybe_snapshot.stamp
touch /node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/v8.stamp
g++ '-DGTEST_DONT_DEFINE_ASSERT_EQ=1' '-DGTEST_DONT_DEFINE_ASSERT_GE=1' '-DGTEST_DONT_DEFINE_ASSERT_GT=1' '-DGTEST_DONT_DEFINE_ASSERT_LE=1' '-DGTEST_DONT_DEFINE_ASSERT_LT=1' '-DGTEST_DONT_DEFINE_ASSERT_NE=1' -I../src -I../deps/v8/include -I../deps/gtest/include -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /node-v5.1.1/out/Release/.deps//node-v5.1.1/out/Release/obj.target/cctest/test/cctest/util.o.d.raw -c -o /node-v5.1.1/out/Release/obj.target/cctest/test/cctest/util.o ../test/cctest/util.cc
g++ -pthread -rdynamic -m64 -o /node-v5.1.1/out/Release/openssl-cli -Wl,--start-group /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/app_rand.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/apps.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/asn1pars.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ca.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ciphers.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/cms.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/crl.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/crl2p7.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dgst.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dh.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dhparam.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dsa.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/dsaparam.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ec.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ecparam.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/enc.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/engine.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/errstr.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/gendh.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/gendsa.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/genpkey.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/genrsa.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/nseq.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ocsp.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/openssl.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/passwd.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkcs12.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkcs7.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkcs8.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkey.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkeyparam.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/pkeyutl.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/prime.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/rand.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/req.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/rsa.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/rsautl.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_cb.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_client.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_server.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_socket.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/s_time.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/sess_id.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/smime.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/speed.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/spkac.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/srp.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/ts.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/verify.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/version.o /node-v5.1.1/out/Release/obj.target/openssl-cli/deps/openssl/openssl/apps/x509.o /node-v5.1.1/out/Release/obj.target/deps/openssl/libopenssl.a -Wl,--end-group -ldl
g++ -pthread -rdynamic -m64 -o /node-v5.1.1/out/Release/cctest -Wl,--start-group /node-v5.1.1/out/Release/obj.target/cctest/test/cctest/util.o /node-v5.1.1/out/Release/obj.target/deps/gtest/libgtest.a /node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/libv8_libplatform.a /node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/libv8_base.a /node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/libv8_libbase.a /node-v5.1.1/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a -Wl,--end-group -ldl -lrt
...
make[1]: Leaving directory '/node-v5.1.1/out'
ln -fs out/Release/node node