centos에 설치된 링크기 문제

6475 단어 re2

묘사

centos 서버에 이gem를 설치하려고 했지만 많은 링크기 오류가 발생했습니다.
다음과 같은 방법으로 설치했습니다.
gem install re2 -- --with-re2-dir=/home/user/.linuxbrew/Cellar/re2/20170701
전체 로그는 다음과 같습니다.
current directory: /home/user/.gem/ruby/2.3.0/gems/re2-1.1.1/ext/re2
/package/host/localhost/ruby-2.3.4/bin/ruby -r ./siteconf20170801-14854-n2fme7.rb extconf.rb --with-re2-dir=/home/user/.linuxbrew/Cellar/re2/20170701
checking for main() in -lstdc++... yes
checking for stdint.h... yes
checking for rb_str_sublen()... yes
checking for main() in -lre2... yes
checking for re2 requires C++11 compiler... yes
checking for RE2::Match() with endpos argument... yes
creating Makefile

current directory: /home/user/.gem/ruby/2.3.0/gems/re2-1.1.1/ext/re2
make "DESTDIR=" clean

current directory: /home/user/.gem/ruby/2.3.0/gems/re2-1.1.1/ext/re2
make "DESTDIR="
compiling re2.cc
cc1plus: warning: command line option '-Wdeclaration-after-statement' is valid for C/ObjC but not for C++
cc1plus: warning: command line option '-Wimplicit-function-declaration' is valid for C/ObjC but not for C++
re2.cc: In function 'VALUE re2_matchdata_begin(VALUE, VALUE)':
re2.cc:350:16: warning: variable 'p' set but not used [-Wunused-but-set-variable]
   re2_pattern *p;
                ^
re2.cc: In function 'VALUE re2_matchdata_end(VALUE, VALUE)':
re2.cc:380:16: warning: variable 'p' set but not used [-Wunused-but-set-variable]
   re2_pattern *p;
                ^
linking shared-object re2.so
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(re2.o): relocation R_X86_64_32S against symbol `_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(regexp.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(strutil.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(bitstate.o): relocation R_X86_64_32S against symbol `_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(compile.o): relocation R_X86_64_32S against symbol `_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(dfa.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(nfa.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(onepass.o): relocation R_X86_64_32S against symbol `_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(parse.o): relocation R_X86_64_32S against symbol `_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(prog.o): relocation R_X86_64_32S against symbol `_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(simplify.o): relocation R_X86_64_32S against symbol `_ZTVSt9basic_iosIcSt11char_traitsIcEE@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: /home/user/.linuxbrew/Cellar/re2/20170701/lib/libre2.a(tostring.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/home/user/.linuxbrew/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
make: *** [re2.so] Error 1

make failed, exit code 2
나는 이미 linux brew를 통해re2를 설치했다.brew info re2 re2: stable 20170701 (bottled), HEAD Alternative to backtracking PCRE-style regular expression engines https://github.com/google/re2 /home/user/.linuxbrew/Cellar/re2/20170701 (13 files, 25.1MB) * Poured from bottle on 2017-07-31 at 11:27:32 From: https://github.com/Linuxbrew/homebrew-core/blob/master/Formula/re2.rb

토론 #1

안녕하세요 @kanedo,
추가 조사를 용이하게 하려면 CentOS 버전을 알려주고 VirtualBox와 같은 몇 가지 문제를 재현하는 절차를 제공합니까?

토론 #2

안녕하세요 @mudge,
centos 버전은 centos 6.9 버전입니다.
불행하게도, 이것은 공유 호스트에서 발생한 것입니다. 나는 그들의 전체 설정

토론 #셋

을 모릅니다. 나는 CentOS 6.9에서 Linuxbrew의git, gcc,re2, Ruby를 사용하여 이 점을 복제할 수 있습니다.
문제는 Linuxbrew를 통해 설치된re2 버전 자체에 있는 것 같습니다. 공유 라이브러리로 정확하게 컴파일되지 않았기 때문입니다. (예를 들어, 이것은 최소한 필요한 -fPIC 로고가 부족한 것 같습니다. 보시는 바와 같이.
official re2 installation instructions에 따라 제 버전의re2를 컴파일한 다음gem를 다시 설치해 보세요. 저는gem가 정상적으로 작동하도록 할 수 있습니다.
공유 호스트를 사용할 때, 이것은 홈 디렉터리 이외의 어느 곳에서도 글을 쓸 수 없다는 것을 의미하는 것입니까?만약 그렇다면, 이렇게 자신의 위치로 컴파일할 수 있습니다. (/home/user/.re2 를 리2 라이브러리를 설치하고 싶은 위치로 바꿀 수 있습니다.)
$ gcc --version
gcc (Homebrew gcc 5.3.) 5.3.0
$ ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58052) [x86_64-linux]
$ git clone https://code.googlesource.com/re2
$ cd re2
$ make prefix=/home/user/.re2
$ make test prefix=/home/user/.re2
$ make install prefix=/home/user/.re2
$ make testinstall prefix=/home/user/.re2
$ gem install re2 -- --with-re2-dir=/home/user/.re2
나는 이것이 너의 문제를 해결할 수 있기를 바란다. 나로 하여금 너의 진전이 어떠한지 알게 해 주십시오.

토론 #4

@mudge의 일에 감사 드립니다.
번들bundle config build.re2 --with-re2-dir=/home/user/.re2과 함께 사용

좋은 웹페이지 즐겨찾기