2013-07-29 3 views
3

Eclipse에서 MinGW 컴파일러가있는 Windows 플랫폼에서 다음을 수행했습니다 - C_proj.exe ---> 링크 ----> libB_proj.a -----> 링크 ----> libA_proj.a정적 라이브러리와 다른 정적 라이브러리를 링크하고 exe에서 마스터 라이브러리를 사용합니다

  1. BI는 libA_proj.a에 대한 경로 만 지정하고있는 연결하는 경우 (즉 수 없기 때문에하지 lib 디렉토리의 이름이 보인다!)를

  2. CI 내부에서 B를 사용할 때 libA_proj.a와 libB_proj.a를 모두 지정해야했습니다.

코드 -

이제
//a.h 
    class a 
    { 
    public: 
     void printA(); 
    }; 

//a.cpp  
    void a::printA() 
    { 
     std::cout<<"This is 'a'"<<std::endl; 
    } 
//b.h 
    class b 
    { 
    public: 
     void printB(); 
     void printA(); 
    }; 
//b.cpp 
    void b::printB() 
    { 
     std::cout<<"This is 'B'"<<std::endl; 
    } 

    void b::printA() 
    { 
     std::cout<<"This is 'B'....calling A"<<std::endl; 
     a objA; 
     objA.printA(); 
    } 

//c.cpp  
    int main() 
    { 
     b objB; 
     objB.printB(); 
     objB.printA(); 
     return 0; 
    } 

내 요구 사항은이 - 전 C EXE와 B와 모두 연결하고 싶지 않아요. B와 C 만 연결하고 작업을 완료하여 제 3 자에게 B와 C exe만을 제공 할 수 있습니까?

+0

확실한 방법이 있지만 툴을 사용하는 방법을 모르겠습니다. [Visual Studio에서이 작업을 수행하는 방법입니다.] – typ1232

+0

@ typ1232 :'.lib'는 .dll 용 썽크 라이브러리라고 가정합니다. –

+0

http://stackoverflow.com/questions/12198261/include-static-library-in-static-library – Derek

답변

2

lib-file (또는 .a 파일)은 zip 파일과 비슷하지만 압축이없는 오브젝트 파일의 모음입니다. 그래서 당신은 정말로 다른 lib 파일로 lib 파일을 연결할 수 없습니다.

당신이 할 수있는 것은 두 개의 작은 라이브러리로 하나의 큰 라이브러리를 형성하는 것입니다. 기본적으로 압축을 풀고 다시 포장하십시오. ar -x libfile.a을 사용하여 모듈을 추출한 다음 ar -a libfile2.a name1.o name2.o을 사용하여 새 라이브러리에 개체 파일을 추가 할 수 있습니다.

그러나 두 구성 요소 사용자에게 두 라이브러리를 연결하도록 알려줍니다. 훨씬 더 쉬운 해결책.

+0

[1] g ++ -c a.cpp -o a.o [2] arcs liba.a a.o [3] g ++ -c b.cpp -o b.o -L. -la [4] ar rcs libb.a b.o [5] g ++ c.cpp -L. -lb -la ........... 대신에 무엇을 할 지 말해 줄 수 있니? : –

+0

예,'ar rcs liba.a ao bo' –

+0

다른 말로하면, 하나의 라이브러리를 두 개가 아닌 하나의 라이브러리로 만들 수 있습니다. 두 개의 라이브러리를 "링크"하여 하나의 라이브러리로 만들 수는 없습니다. 하나의 라이브러리 여기에는 필요한 모든 객체 파일이 포함되어 있습니다. 일부 물류상의 이유로 좋은 해결책이 아니라면 최종 제품의 두 라이브러리에 연결해야합니다. –

관련 문제