나는 매우 복잡한 라이브러리와 실행 파일을 가지고있다 (Linux). 과거에 정적 라이브러리를 사용하여 전체 시스템을 개발 한 후 2 년 전부터 libs가 공유 라이브러리 (-fPIC 등)로 마이그레이션되었습니다. LIBA 및 libB :서로 의존하는 공유 라이브러리 구축 (Linux)
- LIBA는
- libB 내가 구축하고자하는
LIBA에서 일부 함수를 호출 libB에서 일부 함수를 호출 종속성을 확인 나는이 공유 libs와이 있다는 것을, 발견 적절한 종속성을 가진 라이브러리 : libA는 libB에 의존하고 libB는 libA에 종속됩니다. lib가 libA의 빌드 타임에 아직 존재하지 않기 때문에 링커에 "-llibB"를 줄 수는 없습니다
libB의 의존성이없는 libA (미해결 심볼 생성)를 빌드하면 염두에두고 libA를 사용하면 libA에있는 정의되지 않은 기호 때문에 libB도 링크해야합니다. 그것은 annoing!
내가 찾고있는 것은 libA를 빌드하고 현재 libB가없는 libB에 의존성을 만드는 링커에게 알려주는 가능성이다.
어떻게 libA와 libB를 병합하지 않고도 내 문제를 해결할 수 있습니까?
감사합니다, 피터스
편집 : 다음
gcc -shared -Wl,-soname,libB.so.$(MAJOR) -o libB.so
내가 할 수있는 : 나는 (소스 코드를 작성하지 않고) 내가 직접 빈 lib 디렉토리를 생성 할 수 있다는 것을 발견 libA 빌드를 빌드 명령에 -lB으로 빌드하십시오. 그 후 libB.so를 제거했습니다. 마지막으로, 설치 후 libB는 libA를 나타내고 libA는 libB를 나타냅니다.
물론 MAJOR 번호는 libB의 주요 부분과 일치해야합니다. 이는 주요 번호가 모든 libs에 공통적이기 때문에 그렇습니다.
더 적합한 방법이 있다면 나 자신에게 묻고 싶습니다.
나는 디자인 실수라고 생각합니다. 'libA.so'와'libB.so'는 하나의'libAB.so'에 병합되어야합니다. –
아니요, 그들은 서로 독립적으로 살아갈 수 있습니다. 내 대답은 아래에. –
그들은 아마도 "독립적 일 수 있습니다"할 수 있지만 실제로는 둘 다 다른 것에 의존하기 때문에 안됩니다. –