저는 C++11 기능을 사용하여 gcc 4.8, libc 2.18로 컴파일된 공유 라이브러리를 작성했습니다. 이 라이브러리는 gcc 4.4.7, libc 2.12가 있는 클라이언트의 CentOS 6 시스템에서 실행되어야 합니다. 이 라이브러리에는 libc 2.12에는 없는 일부 기호가 있습니다. CentOS 6에서 이 라이브러리를 어떻게 사용할 수 있습니까? 라이브러리를 컴파일하는 방법, 위치, 컴퓨터에 대한 유연성이 있지만 궁극적으로 패키지를 건드릴 수 없는 CentOS 6을 사용하는 클라이언트에서 작동해야 합니다. CentOS 6에서 DevTools-2를 사용하여 컴파일할 수 있습니까? 아니면 ABI 관련 문제가 있을 수 있습니까? 다른 제안사항이 있으면 알려주시기 바랍니다. 미리 감사드립니다.
답변1
실행 중인 시스템과 동일한 시스템에서 컴파일하십시오. 릴리스 버전 점프(예: 7에서 8로)를 달성하려면 재컴파일해야 할 수도 있고 때로는 재컴파일해야 할 수도 있습니다.
다른 컴파일러 버전을 사용하는 경우가능한컴파일러의 공유 도우미 라이브러리, 기본 C 또는 C++(대부분) 라이브러리 또는 다양한 외부 종속성 간에 비호환성이 발생할 수 있습니다. 디버깅하고 싶지 않습니다. 엉망이 아닙니다.
답변2
gcc 4.8로 컴파일된 C++11 기능
? 왜 g++ 4.8이 아닌가?
제안: libstdc++.a를 사용하여 라이브러리를 정적으로 컴파일하십시오. → C++11 함수는 *libstdc++-devel
glibc가 아닌 에 있는 것 같습니다.
devtoolset-2-libstdc++-devel-4.8.2는 정적 라이브러리와 함께 제공됩니다.
/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/{ libstdc++.a, libstdc++_nonshared.a }