이전 libc로 C++11 라이브러리 실행

이전 libc로 C++11 라이브러리 실행

저는 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++-develglibc가 아닌 에 있는 것 같습니다.

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 }


관련 정보