정적 버전의 libgcc (libgcc.a)와 함께 정적으로 (--disable-shared를 사용하여), C 언어 만 (C++이 아님)에서 Mac OS X에 GCC 4.9.2를 빌드했습니다. 물론 libgcc의 정적 버전 만 만들었 기 때문에 libgcc * .dylib 같은 것이 없습니다. GCC는 libgcc.a를 빌드하고 설치했으며 (예상대로) 괜찮습니다. ,gcc가 libgcc_ext.10.5.dylib에 링크해야하는 이유는 무엇입니까?
-no_compact_unwind -lSystem -lgcc_ext.10.5 -lgcc -lSystem
번호 : 그것은 기본적으로이 컴파일러 플래그를 보여줍니다
gcc -v test.c -o test
: 이제 다음 명령을 사용하여 GCC의 새로 지은 사본 (! 간단한 안녕하세요, 세계 예제를 사용)를 호출 할 때 아니 아니! 나는 당신이 libgcc의 공유 버전에 링크하려고하지 않기를 바란다! 구성 단계에서 내가 말했던 것을 기억하지 못하니? 그리고 -static-libgcc 옵션을 사용하면 다음과 같이 나타납니다.
-no_compact_unwind -lgcc_eh -lgcc -lSystem
libgcc_eh? 허? GCC 컴파일 중에 언제 만들어 졌나요? 아 맞아, 그렇지 않아, 왜 libgcc_eh.a를 찾을 수 없는지.
여기 무슨 일 이니? 저는 GCC에 공유 라이브러리가 필요 없다고 특별히 말했습니까? 그렇다면 왜 그것들이 디폴트로 링크하려고합니까? 물론, -nodefaultlibs를 사용하고 -lgcc 및 -lSystem을 수동으로 지정하여이 모든 문제를 해결할 수 있지만 왜 그렇게해야합니까?
또한, GCC 문서는이 말을 가지고
공유 라이브러리로 관하여 libgcc 제공하는 시스템에-shared-관하여 libgcc -static-관하여 libgcc ,이 옵션의 사용을 강제로 공유 또는 정적 중 버전입니다. 컴파일러가 구성되었을 때 libgcc의 공유 버전이 빌드되지 않은 경우이 옵션은 아무 효과가 없습니다.
그래서 나는 GCC에 libgcc의 공유 버전을 빌드하도록 요청하지 않았다면 정적 버전 이외의 다른 것에 링크하려고한다고 가정해서는 안된다. 그러나, 어쨌든, 어떤 이유로, 그것은 않습니다. 나는 이것을 막을 수있는 configure 옵션을 찾지 못했고, 어떤 "기본 라이브러리"가 기본적으로 링크되도록 지정할 수있는 옵션도 찾을 수 없었습니다. GCC가 -nodefaultlibs를 사용하여 이것을 억압하지 않으면 libgcc의 공유 버전에 링크하도록 강요하고있는 것 같습니다. 이것은 거꾸로 보인다.
왜 downvote? – Synthetix