2011-09-06 5 views
3

3 개의 A, B 및 C 프로젝트가 있습니다. A는 보편적이며 B와 C에서 사용됩니다. B는 좀 더 특별하며 지금까지는 C.Eclipse에서 정적 라이브러리로 정적 라이브러리를 링크하는 방법 CDT

이제 A와 B를 가능한 많이 재사용하고 싶기 때문에 두 가지 모두 정적 라이브러리라고 생각했습니다.

그래서 나는 정적 라이브러리와 C를 실행 파일에 링크하지만, C를 링크하고자 할 때 은 A에 대해 어떤 undefined reference 오류를 준다. 그래서 라이브러리 A를 링커 옵션에 추가하여이 문제를 해결했지만 도움이되지 않았습니다.

내가 생각하기에 : B를 배포하고 싶을 때 나는 A를 전개 할 수 있어야한다. 정적 라이브러리 A를 정적 라이브러리 B에 연결하여 2 개의 파일을 배포 할 필요가없는 방법이 있습니까?

그렇다면 이클립스 CDT로 어떻게 달성 할 수 있습니까? 아카이버의 추가 대상을 정의 할 수있는 곳을 찾을 수 없기 때문에 어떻게해야합니까?

추가

나는 리눅스에서 작동하고 있지만 상황이 또한 Windows에서 작동합니다. 하지만 주로 리눅스 개발을 계속할 솔루션이 필요합니다.

편집 지금 내가 실행 파일로를 연결하는 나머지 * .o 인 파일을 사용하여 다음 정적 라이브러리로 A와 B를 연결 및하여 문제를 "해결"하지만이 좋은 고려하지 않는

.

답변

1

정적 라이브러리를 다른 정적 라이브러리와 연결할 수 없습니다. 왜냐하면 정적 라이브러리는 실행 가능한 코드가 아니기 때문에 전체 연결 프로세스 (주로 참조 해상도)가 완료되지 않았기 때문입니다. 동적 라이브러리 및 실행 파일에서만 수행됩니다.

+0

그래서 동적 라이브러리로 컴파일해야한다고합니까? – Nobody

+0

예, B를 혼자서 배포하는 경우, 동적 라이브러리로 만드는 것이 더 낫습니다. –

+0

오, 죄송합니다. Linux에 속해 있음을 잊어 버렸지 만 플랫폼에 독립적이되도록 노력하고 있습니다. 물론 링크가 플랫폼에 독립적 일 수는 없으므로 처음에는 작동하는 Linux 버전이 필요합니다. – Nobody

3

링크 순서를 변경하십시오. C는 B를 사용하고 B는 A를 사용합니다. C는 A를 직접 사용하지 않습니다.

당신은 쓰기 :

gcc -o C -lA -lB 

작동하지 않습니다. 당신은 쓸 수

gcc -o C -lB -lA 

그것은 작동합니다.

CDT의 경우 옵션 -> C/C++ 빌드 -> 설정 -> XXX C 링커 -> 라이브러리으로 이동하여 A와 B의 순서를 변경할 수 있습니다.

다른 방법 : -u 옵션을 사용하십시오.

참조 : http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 그러나 나는 결코 성공하지 못했습니다. 누구나 -u 옵션을 사용하는 방법을 알려 줄 수 있습니까?

관련 문제