GCC에서 정적 및 동적으로 연결된 라이브러리를 모두 사용하십시오

StackOverflow https://stackoverflow.com/questions/809794

  •  03-07-2019
  •  | 
  •  

문제

가능한 많은 X86 Linux 배포판에서 실행되는 이진을 배포해야합니다. 즉, 사용자가 내가 사용하는 버전이 없을 수 있으므로 glibc와 같은 일부 라이브러리를 정적으로 연결해야합니다. FontConfig와 같이 다른 라이브러리는 동적으로 연결되어야합니다. 캐시 파일 형식에 의존하고 각 시스템마다 다를 수있는 하드 코딩 된 위치에 의존하기 때문입니다.

이를위한 명령 줄 옵션은 무엇입니까? -Static을 지정하면 GCC는 라이브러리를 동적으로 연결하는 것을 거부합니다.

도움이 되었습니까?

해결책

모든 시스템 라이브러리와 정적으로 연결, 특히 libc, 최신 유닉스 또는 리눅스 시스템에서 이진을 크게 더 적은 가지고 다닐 수 있는. 그냥하지 마세요.

대신, 이전 시스템에서 바이너리를 연결함으로써 (구형 시스템에 연결된 바이너리)를 사용하여 유리하게 유리하게 사용하십시오 (Redhat 6.2를 사용하고 바이너리가 바이너리 시스템을 보지 못했습니다. 지난 8 년 동안 실행되지 않음) 또는 자동 패키지 (이 답변이 작성된 후 삭제되었습니다).

원래 질문에 답하기 위해 :

gcc main.o -Wl,-Bstatic -lfoo -Wl,-Bdynamic

Linker는 Libfoo의 아카이브 버전을 사용하게됩니다. [후행을하는 것이 중요합니다 -Wl,-Bdynamic 정적 LIBC를 강요하지 않습니다.

다른 팁

Linux에서는 동적 라이브러리가 이에 의존하지 않으면 라이브러리 만 정적으로 연결할 수 있습니다. 즉, 동적 라이브러리를 사용하는 경우 LIBC를 정적으로 연결하는 것을 잊을 수 있습니다. LIBC의 경우에 대해 구축하기 위해 상당히 오래된 버전을 사용하십시오. LIBC는 수년에 걸쳐 강력한 ABI 후진 동성을 유지해 왔습니다.

링커 명령 줄 (.a 또는 .so 라이브러리)에서 링크하고있는 라이브러리 파일로 경로를 전달하고 드롭 스틱. 그것은 트릭을 수행해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top