공유 라이브러리 또는 정적 라이브러리로 빌드 할 수있는 C++ 라이브러리를 사용하고 있습니다. 이 라이브러리는 프로그램이 시작될 때 정적 객체가 등록되고 정적 객체가 만들어지는 팩토리 기술을 사용합니다.gcc가 라이브러리에서 참조되지 않은 정적 C++ 객체를 강제로 연결하는 방법
공유 라이브러리가 사용되는 한 제대로 작동합니다. 정적 버전이 사용되면 정적 객체는 최종 프로그램에 포함되지 않으므로 (직접 참조되지 않기 때문에) 해당 기능을 사용할 수 없습니다.
gcc가 링크 할 때 라이브러리의 모든 정적 객체를 강제로 포함시키는 방법이 있습니까?
라이브러리는 오픈 소스이며 도움이된다면 수정할 수 있습니다.
-Wl - 전체 아카이브는 다른 라이브러리에 이미 포함되어 있거나 해결할 수없는 일부 심볼을 포함시킵니다. 통계를 포함하는 더 정교한 방법이 있습니까? –
이것은 의미가 없습니다. Gene : 공유 라이브러리를로드하는 것과 동일합니다. 전체 라이브러리 만 얻을 수 있습니다. 틀림없이 ld는 외부 참조를 찾는 것에 대한 망쳐 쓴 개념을 가지고 있으므로 올바른 순서를 얻어야합니다. – Yttrill
'-Wl, - no-whole-archive'로 동작을 종료하는 것은 더 이상 포함 할 라이브러리가 없더라도 실제로 선택 사항이 아닙니다. GCC는 명령의 끝에 모든 표준 시스템 라이브러리를 추가 할 것입니다. 그래서'--whole-archive'를 남겨두면 그것들 모두에 영향을받을 것이고 중복 된 심볼 문제가 발생할 것입니다 @GeneVincent는 –