데비안에서 gcc 4.9를 사용하여 큰 C ++ 프로그램을 컴파일했습니다. 실행 가능한 바이너리 코드가 우분투에서도 호환되고 안전한지 알고 싶습니다. 아니면 우분투에서 프로그램을 다시 컴파일해야합니까?
문제는 현재의 모든 Linux (glibc)에 널리 퍼져있는 핵심 라이브러리에 있습니다. libc 공유 라이브러리 내에 각 표준 함수의 버전을 두 개 이상 포함하고 glibc와 함께 제공되는 lib를 지원하는 기능을 추가하는 "기호 버전 관리"라는 "기능"을 통합합니다.
예를 들어, 결과 바이너리는 "GLIBC_2.15"기호 버전에 종속 될 수 있으며 대상 시스템은 최대 "GLIBC_2.14"를 제공합니다. 그러면 치명적인 오류 메시지가 표시되고 그 이상은 표시되지 않습니다.
일부 glibc 버전은 이전 커널이나 하드웨어에서도 실행을 거부하지만 드문 경우입니다.
특정 glibc 부분은 정적 프로그램에서도 동적 라이브러리를 요구할 수 있기 때문에 glibc를 사용하면 정적으로 컴파일하는 것도 옵션이 아닙니다 (컴파일 및 링크하는 동안 발생하면 경고가 표시됩니다).
여러 시스템에서 실행하기 위해 하나의 바이너리를 만들어야하는 경우 다른 libc를 사용하려고합니다. 하나의 바이너리 만 다른 시스템에서 실행하려면 해당 시스템에서 다시 빌드하는 것이 좋습니다.
특정 경우 (glibc에는 적용되지 않음), 대상이 매우 느린 경우 컴파일 된 소스 트리를 복사하고 모든 객체 (* .o) 파일을 터치하고 바이너리를 제거 할 수 있습니다. 그런 다음 실행 make
하면 다시 연결됩니다.
또한 많은 (전부는 아님!) 타사 라이브러리도 기호 버전 관리 요구 사항을 적용 할 수 있으며 이는 이들에도 적용됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다