首次海报,很长一段时间的风扇......(PPC64le)节点GYP重建链接到protobuf的一个模块失败,“缺乏NOP,不能恢复TOC;用-fPIC编译”
我m试图在RHEL 7.1上为ppc64le(little endian)重建一个节点模块,并得到以下令人困惑的输出。我在x64 vm上完成了相同的步骤,并且一切正常。
部分输出在下面,即使它说用-fPIC编译,该选项已经在g ++命令中输出,如输出中所示,所以我不知道该怎么处理这个错误。
而且即使它看起来在Linux-x64的目录静态的protobuf库:../sdk/protobuf/2.5.0/linux-x64/libprotobuf.a
我更换了目录的内容从epel repo的protobuf-static-2.5.0-7.el7.ppc64le rpm中为ppc64le编译库。所以库应该没问题,它们与节点模块预期的版本相同
那么这个错误是什么意思?我怎么能通过它?我使用的相同步骤在linux-x64中工作正常。我能想到的主要区别是我必须为protobuf-static-2.5.0-7.el7.ppc64le包中的ppc64le引入一些静态库(protobuf.a)。这些链接到我正在gyp'ng的节点模块中。下面是'node-gyp rebuild --verbose'的输出:
在此先感谢!
gyp info spawn args '-Goutput_dir=.' ]
gyp verb command build []
gyp verb build type Release
gyp verb architecture ppc64
gyp verb node dev dir /root/.node-gyp/4.2.6
gyp verb `which` succeeded for `make` /usr/bin/make
gyp info spawn make
gyp info spawn args [ 'V=1', 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory `/root/nodejs/napp1/node_modules/mynodemod/node_modules/mynodemod-protobuf/build'
g++ '-DNODE_GYP_MODULE_NAME=protobuf_for_node' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/root/.node-gyp/4.2.6/include/node -I/root/.node-gyp/4.2.6/src -I/root/.node-gyp/4.2.6/deps/uv/include -I/root/.
node-gyp/4.2.6/deps/v8/include -I../../nan -I../sdk/protobuf/2.5.0/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -mminimal-toc -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -s
td=gnu++0x -MMD -MF ./Release/.deps/Release/obj.target/protobuf_for_node/protobuf_for_node.o.d.raw -c -o Release/obj.target/protobuf_for_node/protobuf_for_node.o ../protobuf_for_node.cc
g++ '-DNODE_GYP_MODULE_NAME=protobuf_for_node' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/root/.node-gyp/4.2.6/include/node -I/root/.node-gyp/4.2.6/src -I/root/.node-gyp/4.2.6/deps/uv/include -I/root/.
node-gyp/4.2.6/deps/v8/include -I../../nan -I../sdk/protobuf/2.5.0/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -mminimal-toc -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -s
td=gnu++0x -MMD -MF ./Release/.deps/Release/obj.target/protobuf_for_node/addon.o.d.raw -c -o Release/obj.target/protobuf_for_node/addon.o ../addon.cc
g++ -shared -pthread -rdynamic -m64 -Wl,-soname=protobuf_for_node.node -o Release/obj.target/protobuf_for_node.node -Wl,--start-group Release/obj.target/protobuf_for_node/protobuf_for_node.o Release/obj.target/protobuf_for_node/addon.o
-Wl,--end-group ../sdk/protobuf/2.5.0/linux-x64/libprotobuf.a
/usr/bin/ld: ../sdk/protobuf/2.5.0/linux-x64/libprotobuf.a(descriptor.o): In function `void google::protobuf::STLDeleteContainerPointers<__gnu_cxx::__normal_iterator<google::protobuf::FileDescriptorTables**, std::vector<google::protobuf::
FileDescriptorTables*, std::allocator<google::protobuf::FileDescriptorTables*> > > >(__gnu_cxx::__normal_iterator<google::protobuf::FileDescriptorTables**, std::vector<google::protobuf::FileDescriptorTables*, std::allocator<google::protob
uf::FileDescriptorTables*> > >, __gnu_cxx::__normal_iterator<google::protobuf::FileDescriptorTables**, std::vector<google::protobuf::FileDescriptorTables*, std::allocator<google::protobuf::FileDescriptorTables*> > >)':
(.text._ZN6google8protobuf26STLDeleteContainerPointersIN9__gnu_cxx17__normal_iteratorIPPNS0_20FileDescriptorTablesESt6vectorIS5_SaIS5_EEEEEEvT_SB_[_ZN6google8protobuf26STLDeleteContainerPointersIN9__gnu_cxx17__normal_iteratorIPPNS0_20File
DescriptorTablesESt6vectorIS5_SaIS5_EEEEEEvT_SB_]+0x44): call to `google::protobuf::FileDescriptorTables::~FileDescriptorTables()' lacks nop, can't restore toc; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
make: *** [Release/obj.target/protobuf_for_node.node] Error 1
make: Leaving directory `/root/nodejs/napp1/node_modules/mynodemod/node_modules/mynodemod-protobuf/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/root/nodejs/napp1/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 3.10.0-229.ael7b.ppc64le
gyp ERR! command "/root/ibm/node/bin/node" "/root/nodejs/napp1/node_modules/.bin/node-gyp" "rebuild" "--verbose"
gyp ERR! cwd /root/nodejs/napp1/node_modules/mynodemod/node_modules/mynodemod-protobuf
gyp ERR! node -v v4.2.6
gyp ERR! node-gyp -v v3.2.1
编辑您的问题,添加您的评论中提到的实际问题。 – bastelflp