2010-12-28 3 views
11

LDFLAGS를 통해 gcc_s와 gcc를 연결하는 것과 다른 점은 무엇입니까? gcc_s는 정적 라이브러리이고 gcc 공유 라이브러리입니까?-lgcc_s와 gcc의 차이점

gcc와 연결된 링크가 나와있는 솔루션을 찾고 있었기 때문에 gcc_s 만 작동합니다. 나는 진정한 차이점을 알고 싶다.

< < 숨겨진 기호`/some/library/path.a(_filename.o에 '__name_here)가 DSO

이 경우

에 의해 참조되는 문제는 일반적으로 중 "-l GCC를 추가하여 해결 "또는"gcc -print-libgcc-file-name "을 연결 플래그 (LDFLAGS)에 추가하십시오. 그러나, 다른 일반적인 플랫폼 (i386, amd64, sparc64)과 달리 여기서 충분하지 않습니다. 머리를 두드리는 소리를 많이 치고 나면,이 플래그는 libc 을 최종 실행 파일로 연결할 때도 필요합니다. 링크 : http://people.defora.org/~khorben/200903.html

+0

'-static'이 사용될 때 사용되는'libgcc_eh.a'도 있습니다. http://stackoverflow.com/questions/10763394/how-to-build-ac-program-using-a-custom-version-of-glibc-and-static-linking –

답변

12

libgcc_s.so은 공유 라이브러리이며, libgcc.a은 정적 라이브러리입니다. 그들은 동등하지 않습니다; 둘을 연결해야 할 수도 있습니다. libgcc_s에는 프로세스에서 여러 사본을 가져서는 안되는 전역 변수가 들어 있습니다. libgcc의 코드는 여러 번 링크하는 것이 안전합니다.

+0

안녕하세요, 감사합니다. << 필요할 수 있습니다. 둘 다 연결합니다. 이 필요성이 언제 생길까요? – kumar

+3

@kumar : 일부 기호 (예 :'__register_frame')는 libgcc_s에만 있고, 다른 기호 (예 :'__eprintf')는 libgcc에만 있습니다. 'nm -D - 정의 전용 libgcc_s.so' resp를 사용하십시오. 'nm - defined-only libgcc.a'는 비교할 전체 목록을 얻습니다. –

+1

둘 다 왜 필요한가요? 왜 그것들은 동일하지 않고 오직 하나는 정적이고 다른 하나는 동적입니까? –

관련 문제