RedHat6에서 최신 gcc로 컴파일하기: 소프트웨어를 배포하는 방법은 무엇입니까?

RedHat6에서 최신 gcc로 컴파일하기: 소프트웨어를 배포하는 방법은 무엇입니까?

내 소프트웨어는 RHEL7을 포함한 다양한 운영 체제에서 컴파일됩니다. RHEL6에서 실행되도록 빌드해 달라고 요청했습니다. 내 문제는 내 C++ 코드가 gcc-4.4(RHEL6과 함께 제공되는 기능)에 없는 C++11 기능에 크게 의존한다는 것입니다. Nullptr, auto,lamda는 지원되지 않으며 코드에 이러한 항목이 많이 있습니다.

개발자 도구 세트와 같이 RHEL6에서 작동하도록 최신 gcc 버전을 얻는 방법이 있다는 것을 확인했습니다. RHEL6용 소프트웨어를 구축할 수 있을 것이라는 데는 의심의 여지가 없습니다.

하지만 gcc-6 등으로 컴파일된 소프트웨어의 바이너리에는 무엇을 제공해야 합니까? gcc-6용 C 라이브러리? gcc-6용 C++ 라이브러리? 이를 내 바이너리에 정적으로 연결해야 합니까?

게다가 내 소프트웨어는 .rpm 파일로 패키지되어 표준 위치인 /usr/bin, /usr/lib...에 설치됩니다. 새 C 및 C++ 라이브러리 파일을 대상 시스템의 어디에 설치합니까? (분명히 /usr/lib에는 없으므로 기본값을 방해할 수 있습니다!)

편집하다:내 소프트웨어는 공유 객체입니다. C++ 라이브러리를 정적으로 연결할 수 있을까요? 하지만 내 공유 개체(내가 제어할 수 없음)를 사용하는 프로그램은 어떻습니까? 다른 버전의 C++ 라이브러리를 사용할 수 있나요? 링커가 중복 항목을 많이 찾지 않습니까? 지렁이 캔을 열 것 같네요...

편집하다:RHEL6의 표준 C++ 라이브러리와 함께 최신 gcc 컴파일러를 사용할 수 있습니까?

편집하다:공유 객체에는 순수 "C" 인터페이스(표준화)가 있습니다.

답변1

이러한 새로운 C 및 C++ 라이브러리 파일을 대상 시스템의 어디에 설치합니까? (분명히 /usr/lib에는 없으므로 기본값을 방해할 수 있습니다!)

/usr/lib/대신에 이러한 새 라이브러리 (또는 대상 시스템의 기본값, 내 데비안에서는 들어오고 /usr/lib/x86_64-linux-gnu/나가는 라이브러리) 를 설치합니다 /lib/x86_64-linux-gnu/. 넌 신경써야 해-에스.

내 소프트웨어는 공유 객체입니다. C++ 라이브러리를 정적으로 연결할 수 있을까요?

이는 다음에는 적용되지 않을 수 있습니다.공유 객체(그러나 실행 파일에 적용할 수 있으며 그런 다음 libstdc++정적으로 및 동적으로 링크 할 수 있습니다 libc.so). 그러나 공유 객체는 다른 공유 라이브러리와 연결될 수 있습니다. C++11 라이브러리를 제공하는 경우 사용자는 C++11 컴파일러가 필요합니다.매우 조심스럽다귀하의 라이브러리에는 C 호환 API만 있습니다.

일부 헤더 파일을 게시할 수 있으며 다음을 활용해야 합니다.패키지 구성따라서 적절한 .pc파일을 보내십시오.

독서를 고려해보세요도서관 운영방법,C++ dlopen mini 사용법 가이드그리고 드레이퍼의공유 라이브러리를 작성하는 방법종이.

RHEL6의 표준 C++ 라이브러리와 함께 최신 gcc 컴파일러를 사용할 수 있습니까?

아니요. 표준 C++ 라이브러리는 C++ 컴파일러와 밀접하게 관련되어 있으며 ABI가 다를 수 있습니다.

그건 그렇고, 나는 당신이 라이브러리의 소스 코드를 제공할 것을 적극 권장합니다.무료 소프트웨어. 그런 다음 이전 Redhat 배포판을 작업하는 커뮤니티에 라이브러리를 올바르게 패키징하는 데 도움을 요청할 수 있습니다.

라이브러리에는 다른 많은 종속성이 있을 수 있습니다. 예를 들어 GUI 라이브러리인 경우 다른 리소스(예: 글꼴 또는 이미지)를 사용할 수 있습니다.

관련 정보