2012-10-12 2 views
1

두 개의 프로젝트가 C++로 작성되었습니다. 첫 번째 프로젝트는 기본 프로젝트이고 두 번째 프로젝트는 첫 번째 프로젝트에 대한 애드온을 가지고 있으므로 두 번째 프로젝트를 빌드하고 설치할 때 첫 번째 프로젝트의 기능에 추가됩니다.여러 프로젝트와 작업하는 Eclipse

두 개의 별도 Makefile 프로젝트 인 'first'와 'second'를 만들었으며 두 프로젝트를 따로 만들 수있었습니다.

제 문제는 '첫 번째'에서 생성 된 바이너리를 '두 번째'의 기본 바이너리로 연결할 수 없다는 것입니다. 내가 stackoverflow에 대한 비슷한 질문을 검색했지만 어떻게 ''초 '에서 생성 된 바이너리를 연결하는 방법에 대한 아이디어를 얻지 못했습니다, 어떤 도움을 크게 주시면 감사하겠습니다.

질문을 다시 작성해야할지 알려주세요.

답변

1

것은 당신이 GCC를 사용하고 reference for linker options을 읽을 경우 당신은 외부 라이브러리와 연결하기위한 옵션에 알 수 있습니다 :

  • -L<directory>

    이 옵션은 라이브러리 검색 경로에 <directory>을 추가 링커를 알려줍니다 . 즉 링커에게 라이브러리 파일을 찾을 위치를 알려줍니다.

  • -l<name-of-lib>

    이 옵션은 라이브러리와 연결하는 링커를 알려줍니다. POSIX 환경 (Linux, OSX, Cygwin 또는 MinGW를 사용하는 Windows)의 라이브러리는 libname-of-lib.a과 같은 이름이지만 -l 옵션을 사용하면 lib 접두사 또는 .a 확장자를 사용할 필요가 없습니다. 또한 -l 옵션에 작은 문자 L (대문자 i 또는 숫자 1이 아님)에 유의하십시오.

요약하면 : 다른 디렉토리에서 라이브러리와 링크를이 같은 링크 : 당신이 -L 옵션 project1에 대한 라이브러리가있는 디렉토리를 지정해야합니다 귀하의 경우에는

$ gcc <other flags> <object files> -o <executable> -L<directory> -l<library> 

하고, -l 옵션의 경우 라이브러리의 기본 이름을 전달합니다.


당신이 라이브러리에 project1을 설정하고, 직접 오브젝트 파일을 링크하지 않으려는 반면에 경우에, 그것은 좋은 너무입니다 :

$ gcc <flags> <object files of project1> <object files of project2> -o <executable> 

오브젝트 파일은 물론 수 있습니다 전체 또는 상대 경로.

 
/
`-- home 
    `-- user 
     `-- myproject 
      |-- project1 
      `-- project2 

는 그런 다음 project2 디렉토리에있는 경우

../project1/objectfile.o 

처럼 project1에서이 모든 오브젝트 파일에 액세스 할 수 있습니다에의 할 수 있습니다 당신은 다음과 같은 디렉터리 구조를 가질 경우, 예를 들어, 물론 Makefile에 위치해야합니다.

+0

요아킴에 감사드립니다. 이것은 참으로 도움이되었습니다. :) – hld619

관련 문제