2

I got the following error during npm install of nodegit:

> nodegit@0.15.1 preinstall /home/mhu/nodegit
> node lifecycleScripts/preinstall

[nodegit] Running pre-install script
[nodegit] npm@2 installed, pre-loading required packages
[nodegit] Configuring libssh2.
{ [Error: Command failed: /bin/sh -c /home/mhu/nodegit/vendor/libssh2/configure --with-libssl-prefix=/home/mhu/nodegit/vendor/openssl/openssl
configure: error: in `/home/mhu/nodegit/vendor/libssh2':
configure: error: C compiler cannot create executables
See `config.log' for more details
]
  killed: false,
  code: 77,
  signal: null,
  cmd: '/bin/sh -c /home/mhu/nodegit/vendor/libssh2/configure --with-libssl-prefix=/home/mhu/nodegit/vendor/openssl/openssl' }
configure: error: in `/home/mhu/nodegit/vendor/libssh2':
configure: error: C compiler cannot create executables
See `config.log' for more details

[nodegit] ERROR - Could not finish preinstall
{ [Error: Command failed: /bin/sh -c /home/mhu/nodegit/vendor/libssh2/configure --with-libssl-prefix=/home/mhu/nodegit/vendor/openssl/openssl
configure: error: in `/home/mhu/nodegit/vendor/libssh2':
configure: error: C compiler cannot create executables
See `config.log' for more details
]
  killed: false,
  code: 77,
  signal: null,
  cmd: '/bin/sh -c /home/mhu/nodegit/vendor/libssh2/configure --with-libssl-prefix=/home/mhu/nodegit/vendor/openssl/openssl' }

Can someone help me with this? Is it because a permission issue that caused the C compiler to bot able to create executables?

my environment:

os: centos-release-6-8.el6.centos.12.3.x86_64

gcc: 4.9.1

openssl: openssl-1.0.1e-48.el6.x86_64

libssh2: libssh2-1.4.2-2.el6_7.1.x86_64

node: v4.4.7

npm: 2.15.8

gcc -v gives:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/packages/encap/gcc-4.9.1/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.9.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.9.1/configure --enable-languages=c,c++,fortran --enable-shared --disable-libstdcxx-pch --enable-lto --enable-libgomp --enable-__cxa_atexit --enable-tls --with-gmp --with-mpfr --with-mpc --with-libelf
Thread model: posix
gcc version 4.9.1 (GCC)

Here is the part in config.log in /home/mhu/nodegit/vendor/libssh2 that gives error:

configure:3429: $? = 0
configure:3418: gcc -v >&5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/packages/encap/gcc-4.9.1/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.9.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.9.1/configure --enable-languages=c,c++,fortran --enable-shared --disable-libstdcxx-pch --enable-lto --enable-libgomp --enable-__cxa_atexit --enable-tls --with-gmp --with-mpfr --with-mpc --with-libelf
Thread model: posix
gcc version 4.9.1 (GCC)
configure:3429: $? = 0
configure:3418: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:3429: $? = 1
configure:3418: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'
gcc: fatal error: no input files
compilation terminated.
configure:3429: $? = 1
configure:3449: checking whether the C compiler works
configure:3471: gcc  -I/home/mhu/nodegit/vendor/openssl/openssl/include  conftest.c  >&5
/usr/bin/ld: unrecognized option '-plugin'
/usr/bin/ld: use the --help option for usage information
collect2: error: ld returned 1 exit status
configure:3475: $? = 1
configure:3513: result: no
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "libssh2"
| #define PACKAGE_TARNAME "libssh2"
| #define PACKAGE_VERSION "-"
| #define PACKAGE_STRING "libssh2 -"
| #define PACKAGE_BUGREPORT "libssh2-devel@cool.haxx.se"
| #define PACKAGE_URL ""
| #define PACKAGE "libssh2"
| #define VERSION "-"
| /* end confdefs.h.  */
|
| int
| main ()
| {
|
|   ;
|   return 0;
| }
configure:3518: error: in `/home/mhu/nodegit/vendor/libssh2':
configure:3520: error: C compiler cannot create executables
See `config.log' for more details
jww
  • 97,681
  • 90
  • 411
  • 885
Calvin Hu
  • 3,595
  • 4
  • 18
  • 23
  • It seems like you don't have a compiler installed for your CPU architecture? Can you include the full output of `gcc -v` in your question? – mscdex Aug 03 '16 at 19:29
  • Also, do you have the `CC` environment variable set (`echo $CC`)? – mscdex Aug 03 '16 at 19:30
  • @mscdex no I didn't set $CC. – Calvin Hu Aug 03 '16 at 19:52
  • @mscdex I'm running NodeGit in a CentOS build server, and here is gcc version on that server: Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/packages/encap/gcc-4.9.1/bin/../libexec/gcc/x86_64-unknown-‌​linux-gnu/4.9.1/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../gcc-4.9.1/configure --enable-languages=c,c++,fortran --enable-shared --disable-libstdcxx-pch --enable-lto --enable-libgomp --enable-__cxa_atexit --enable-tls --with-gmp --with-mpfr --with-mpc --with-libelf Thread model: posix gcc version 4.9.1 (GCC) – Calvin Hu Aug 03 '16 at 19:53
  • @jww Sorry I have just pasted the portion in config.log that shows the error. – Calvin Hu Aug 03 '16 at 20:18

1 Answers1

2

From config.log, your problem is:

/usr/bin/ld: unrecognized option '-plugin'

This appears to be an obscure error. Its discussed in two questions on Stack Overflow. The most promising question is How to fix “unrecognized option '-plugin`” when using gdc to compile D program?.

To fix this in Autotools (which produces config.log and friends), you need to do the following:

export CPPFLAGS="-fno-use-linker-plugin"
export CFLAGS="-fno-use-linker-plugin"
export CXXFLAGS="-fno-use-linker-plugin"

Then, in the Autotools world, you would:

./configure --with-libssl-prefix=/home/mhu/nodegit/vendor/openssl/openssl ...

You can sometimes get away with adding the flag to the compiler:

export CC=gcc -fno-use-linker-plugin
export CXX=g++ -fno-use-linker-plugin

Unfortunately, that's where my knowledge ends. I don't know what you should do for npm. This looks like the question to turn to for the answer: How to pass options to dependent package installs?

Community
  • 1
  • 1
jww
  • 97,681
  • 90
  • 411
  • 885