내가 본 적이있는 --whole-archive
링커 옵션의 유일한 실제 사용은 정적 라이브러리에서 공유 라이브러리를 만드는 것입니다. 최근에 나는 Makefile (들)을 방문했다.이 라이브러리는 집 정적 라이브러리와 링크 할 때 항상이 옵션을 사용한다. 이것은 물론 실행 파일이 참조되지 않은 개체 코드를 불필요하게 가져 오게합니다. 이것에 대한 나의 반응은 이것이 명백한 잘못이라는 것이 었습니다. 나는 여기서 뭔가를 놓치고 있습니까?ld 링커 질문 : --whole-archive 옵션
내가 가진 두 번째 질문은 전체 보관 옵션과 관련하여 읽지 만 상당히 구문 분석 할 수는 없습니다. 실행 파일이 정적 라이브러리와 동일한 객체 코드를 (부분적으로) 가진 공유 라이브러리와 연결되는 경우 정적 라이브러리와 연결하는 동안 --whole-archive
옵션을 사용해야하는 효과가 있습니다. 그것은 공유 라이브러리이고 정적 라이브러리는 오브젝트 코드 측면에서 중첩됩니다. 이 옵션을 사용하면 (사용 여부에 관계없이) 모든 심볼이 실행 파일에서 해결됩니다. 이것은 객체 코드의 중복을 피하기 위해서입니다. 혼란 스럽습니다. 심볼이 프로그램에서 심판을 받으면 링크 할 때 고유하게 해결되어야합니다. 중복에 대한이 비즈니스는 무엇입니까?
감사합니다 (이 단락은 꽤 명확 전형이 아닌 경우 용서)
Russion libhttp.a를 빌드 할 수있는 경우 register_handler 함수가 libhttp.a에 있음을 증명합니다. 그렇다면이 함수는 main.cc의 register_handler를 어떻게 참조 할 수 있습니까? 따라서이 경우 우리는 당신의 아이디어를 구현하기 위해 다른 방법을 사용해야합니다. – longbkit