2013-04-12 3 views
1

내 프로젝트에 lib1.a 및 lib2.a라는 라이브러리 파일이 2 개 있습니다. Lib1.a는 lib2.a를 사용하고 있습니다. lib2.a의 소스 코드를 제공했지만 lib1.a의 소스 코드가 없습니다. 내 프로젝트에 대해 lib2.a를 변경하여 함수 내부에 지역 변수를 추가한다고 말할 수 있습니다.다른 정적 라이브러리에서 사용하는 정적 라이브러리 변경

내 질문에 함수 이름이 변경되지 않았으므로 lib2.a가 변경된 lib1.a를 다시 컴파일해야합니까? 어쨌든 제가 lib1.a의 소스 코드없이 "lib1.a는 새로운 lib2.a를 사용해야합니다"라고 링커에게 말합니까?

+0

라이브러리가 원래 C 또는 C++ 컴파일러로 컴파일 되었습니까? – Josh

+0

라이브러리는 C 컴파일러로 빌드합니다. –

답변

2

당신이 말한대로 로컬 변수가 추가 된 것처럼 보이면 다른 라이브러리를 다시 작성할 필요가 없습니다. 이것은 정적 라이브러리가 일반적으로 서로 직접 링크하지 않기 때문에 실행 파일이 결국 모두 함께 연결하기 때문입니다.

+0

조금 확장하면 : lib1.a는 lib2.a 함수가 저장된 메모리 위치를 가리 키려고 시도합니다. 문제는 lib2.a 함수가 isn이 아니기 때문입니다 lib1.a와 동일한 파일에 lib1.a는 그 함수가 어디에 있는지 알 수 없습니다. 링커의 임무는 이러한 주소를 "확인"하는 것입니다. 그래서 링커는 하나가 다른 것에 의존하기 때문에이 파일들을 결합하는 것을 알게 될 것입니다. –

+0

이제 lib2.a에서 완전히 새로운 함수를 만들면 lib1.a는이 함수를 사용하지 않기 때문에 새로운 함수를 알 수 없습니다. 그러나 프로토 타입이 변경되지 않는 한 원하는대로 함수를 수정할 수 있으며 lib1.a는 주소 만 참조하기 때문에 계속 사용할 수 있습니다. –

관련 문제