在npm安装期间,libssh2中的“C编译器无法创build可执行文件”

在npm安装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' } 

有人可以帮我弄这个吗? 是否因为导致C编译器能够创build可执行文件的权限问题?

我的环境:

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

节点: v4.4.7

npm: 2.15.8

gcc -v给出:

 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) 

这里是/ home / mhu / nodegit / vendor / libssh2中config.log中的错误:

 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 

config.log ,你的问题是:

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

这似乎是一个晦涩的错误。 它在Stack Overflow的两个问题中进行了讨论。 最有希望的问题是如何解决“无法识别的选项” – 插件“”当使用GDC编译D程序? 。

为了解决这个Autotools(它产生config.log和朋友),你需要做到以下几点:

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

那么,在Autotools世界里,你会:

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

您有时可以将标志添加到编译器中:

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

不幸的是,这是我的知识结束的地方。 我不知道你应该为npm做什么。 这看起来像是要回答的问题: 如何将选项传递给相关的软件包安装?

Interesting Posts