2014-01-13 4 views
3

관리자 권한이없는 Linux 시스템에 Rcpp 패키지를 설치하는 중 링커 오류가 발생합니다.interp2d (GSL 유형 라이브러리)에 Rcpp 연결

relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC

내가 차례로 GSL의 종속성이 외부 라이브러리 interp2d을 사용하는 파일 solve.cpp이 : 간단히 말해서,이 오류가 발생합니다. 내 의존성은 [[Rcpp::depends(RcppArmadillo,RcppGSL)]]DESCRIPTION을 통해 지정합니다. 내 Makevars는 linterp2d 플래그의 추가는 RcppGSL 패키지에서 하나 같다 : 나는 시스템의 environement 변수

export LOCAL_INCLUDE="-I/data/uctpfos/local/include/" 
export LOCAL_LIBS="-L/data/uctpfos/local/lib/" 

을 정의

PKG_CPPFLAGS = -W $(GSL_CFLAGS) $(LOCAL_INCLUDE) 
PKG_LIBS += $(GSL_LIBS) $(LOCAL_LIBS) -linterp2d $(RCPP_LDFLAGS) 

.

나는 R CMD INSTALL bkPackage을하고 참조 :

g++ -I/cm/shared/apps/R/3.0.1/lib64/R/include -DNDEBUG -W -I/cm/shared/apps/gsl/1.15/include -I/data/uctpfos/local/include -fPIC -I/usr/local/include -I"/data/uctpfos/R/x86_64-unknown-linux-gnu-library/3.0/Rcpp/include" -I"/data/uctpfos/R/x86_64-unknown-linux-gnu-library/3.0/RcppArmadillo/include" -I"/data/uctpfos/R/x86_64-unknown-linux-gnu-library/3.0/RcppGSL/include" -fpic -O3 -fPIC -c RcppExports.cpp -o RcppExports.o 

g++ -I/cm/shared/apps/R/3.0.1/lib64/R/include -DNDEBUG -W -I/cm/shared/apps/gsl/1.15/include -I/data/uctpfos/local/include -fPIC -I/usr/local/include -I"/data/uctpfos/R/x86_64-unknown-linux-gnu-library/3.0/Rcpp/include" -I"/data/uctpfos/R/x86_64-unknown-linux-gnu-library/3.0/RcppArmadillo/include" -I"/data/uctpfos/R/x86_64-unknown-linux-gnu-library/3.0/RcppGSL/include" -fpic -O3 -fPIC -c solve.cpp -o solve.o 

문제점이 연결 단계에서 그 후 나타납니다 당신이 볼 수 있듯이

/usr/bin/ld: /data/uctpfos/local/lib/libinterp2d.a(interp2d_spline.c.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC 
/data/uctpfos/local/lib/libinterp2d.a: could not read symbols: Bad value 

:

g++ -shared -L/usr/local/lib64 -o bkPackage.so RcppExports.o solve.o -L/cm/shared/apps/gsl/1.15/lib -lgsl -lgslcblas -lm -L/data/uctpfos/local/lib -linterp2d -L/data/uctpfos/R/x86_64-unknown-linux-gnu-library/3.0/Rcpp/lib -lRcpp -Wl,-rpath,/data/uctpfos/R/x86_64-unknown-linux-gnu-library/3.0/Rcpp/lib 

오류는 다음과 같이 다음 나는 이것을 -fPIC으로 컴파일 했으므로 그렇게 할 수는 없다.

+2

'libinterp2d.a'가'-fPIC'로 컴파일되지 않았다는 불평합니다. 당신은 또한'-fPIC'로 컴파일되었는지 확신합니까? 또한, 여러분 모두 깃발에'-fpic'과'-fPIC'을 둘 것 같습니다; 아마도'-fPIC' 만 원할 것입니다. 나는'R'이 실제로 그것이 기본적으로 켜져 있음을 보장한다고 생각한다. –

+1

답변으로 게시해야합니다. libinterp2d를 -fPIC로 다시 컴파일하십시오! 감사! –

답변

2

libinterp2d.a-fPIC으로 컴파일되지 않았습니다. 그것도 -fPIC과 함께 컴파일되었는지 확실합니까?

또한 귀하의 국기에는 -fpic-fPIC 명이 표시됩니다. 당신은 아마 -fPIC을 원할 것입니다. R은 실제로 기본적으로 켜져 있다고 확신합니다.