2013-05-14 3 views
1

저는 Fedora 18 시스템에서 C++ 11 표준의 클래스를 사용하는 프로젝트에서 작업 중이며이를 Centos 6.4 서버에 배포하려고합니다.Fedora 18 for Centos 6.4에서 교차 컴파일

libc 및 libC++ 버전 (GLIBC_2.11, GLIBCXX_3.4.15 및 내 페도라 기기 GLIBC_2.14 및 적어도 GLIBCXX_3.4.17)을 제외한 모든 로더 오류를 해결할 수있었습니다.

라이브러리의 서버 버전 또는 이전 버전과 호환되도록 컴파일러에 알릴 수 있습니까? 내가 LDD 실행을 실행하면

는 내가 사전에

./executable: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./executable) 
./executable: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./executable) 

감사를 얻을!

+0

[이 질문] (http://stackoverflow.com/questions/2728552/link-to-a-different-libc-file) 이미 거래 libc에서는 libstdC++로 확장하기가 너무 어렵지 않아야합니다. – syam

+0

개발자 컴퓨터에서 필요한 공유 객체를 libs 폴더에 복사하고 ** - Xlinker -rpath = libs/-Xlinker -Ilibs/ld.so ** ** CXXFLAGS ** 및 ** LFLAGS **를 ** Makefile **. 그렇다면이 폴더와 실행 파일을 서버에 복사하고 Qt에 관한 다른 링커 오류가 발생합니다. 적어도 진행 상황 :-) –

+0

@ 얌 : 고마워! 프로그램을 실행시킬 수있었습니다 :-) 필요한 공유 라이브러리를이 lib 폴더에 복사하고 모든 것을 서버에 배포했습니다. –

답변

3

수동으로 라이브러리를 별도의 디렉토리에 복사하는 대신 mockepel-6-x86_64 구성을 사용하여 CentOS 빌드 env를 사용하는 chroot를 설정할 수 있습니다.

모의 chroot에서 원하는 패키지 (예 : Qt)를 설치하고 거기에 빌드하면 코드가 패키지의 나머지 부분이 아닌 chroot에 설치된 CentOS 6 라이브러리 만 사용됩니다. 귀하의 Fedora OS.

업데이트 : 당신이 epel-6

바인드로 fedora-19를 바꾸십시오 당신의 목적을 위해

# only need these steps once to setup the chroot 
mock -r fedora-19-x86_64 --init 
mock -r fedora-19-x86_64 --install yum 
mock -r fedora-19-x86_64 --shell 'mkdir -p /builddir/gcc/src /builddir/gcc/build' 
su -c 'mount --bind $PATH_TO_GCC_SOURCES /var/lib/mock/fedora-19-x86_64/root/builddir/gcc/src' 
# enter root password 
mock -r fedora-19-x86_64 --shell 
# now in chroot 
yum install gmp-devel mpfr-devel libmpc-devel flex autogen 
su - mockbuild 
cd gcc/build 
../src/configure --prefix=/builddir/gcc/install ... etc. ... 

: 내가 GCC를 구축하기위한 모의는 chroot를 사용하고

내가 이렇게 마운트는 chroot에 GCC 소스가있을 필요가 없다는 것을 의미합니다. 기존 파일 시스템에서 기존 복사본을 사용할 수 있습니다. GCC 빌드에 대한 정보는 http://gcc.gnu.org/wiki/InstallingGCC을 참조하십시오.

일단 Ghost를 chroot에 설치하면이 프로그램을 사용하여 자신의 프로그램을 빌드 한 다음 CentOS 용으로 패키지 할 수 있습니다.

나중에 다시는 chroot로 이동하십시오 :

mock -r fedora-19-x86_64 --shell 
su - mockbuild 
+0

'glibc'에 누락 된 기능은 없습니까? 우리가 C++ 11을 사용하기 때문에 CentOS의'glibc' 버전은 그것을 지원하지 않을 수도 있습니다. –

+1

모의 chroot는 CentOS 머신과 동일한 glibc를 사용할 것이므로 실행 파일은 새로운 glibc의 어떤 것도 의존하지 않을 것입니다. 그러나 "컴파일러에게 서버 버전이나 이전 버전의 호환 가능한 라이브러리 버전을 컴파일/링크하도록 알릴 수 있습니까?" 하지만 그것은 새로운 라이브러리를 사용하기를 원한다는 모순이 있습니다. C++ 11 기능이없는 이전 lib에 링크하거나 C++ 11 기능이있는 최신 libs에 링크하면 둘 다 가질 수 없습니다! –

+0

C++ 11 기능이 필요한 경우에는 CentOS 상자에 최신 libs가 필요하거나 모의 chroot에 최신 GCC를 설치할 수 있으므로 CentOS glibc를 사용하므로 '-static- libstdcxx'를 사용하여 새로운 libstdC++에 정적으로 링크 할 수 있습니다. 그렇게하면 실행 파일은'libstdC++. so'에 의존하지 않고 오직 CentOS 박스에있는 더 오래된 glibc에만 의존 할 것입니다. –

관련 문제