2017-12-14 9 views
1

오브젝트 파일을 연결하려고하는데 Codelite IDE에서 UnitTest ++를 사용하여 테스트를 작성할 수 있습니다. 신비하게도 tutorial은 (다른) 프로젝트의 파일 .o을 사용하는 방법을 말하지 않습니다.테스트에서 프로젝트의 오브젝트 파일을 링크 할 때 문제가 발생했습니다.

명령 줄을 사용하는 경우 this thread이 어떻게 수행하는지 보여줍니다. 그러나 Codelite 편집기에서 더 많은 어려움을 겪고 있습니다. this other thread에서 허용되는 대답은 "[i] n codelite의 IDE입니다. 링커의 옵션 텍스트 상자에 추가되었습니다."그러나 나는 그런 경우가 아니라고 생각합니다.

.o 파일의 경로를 Library Search Path 지점에 추가 한 다음이 바로 아래 Libraries 개의 개별 파일 이름을 추가합니다. 이렇게하면 /usr/bin/ld: cannot find -l<stuff> 오류가 발생합니다. Library 지점에있는 특정 파일의 이름을 생략하면 undefined reference to 오류가 발생합니다.

이 문제를 해결하기 위해 원본 프로젝트를 라이브러리로 컴파일해야합니까? 아니면 내가 볼 수없는 해결책이 있습니까? 내가 실행할 my_class_test.cpp 파일은 다음과 같은 :

#include <UnitTest++/UnitTest++.h> 

#include "my_class.h" 

SUITE(MyClassTest) 
{ 

class MCFixture 
{ 
public: 
    MyClass me; 
    MCFixture() : me("a", "b", "c") {}; 
}; 

TEST_FIXTURE(MCFixture, ConstructorTest) 
{ 
    CHECK_EQUAL(1.0, 1.0); 
} 

} //SUITE(MyClassTest) 

답변

1

CodeLite이 이름은 당신이 상자 도서관에서 당신이 링커 -l 옵션에 전달하려는 값을하는 쓰기 있다고 가정합니다.

링커 옵션 -lfoo은 (기본 검색 디렉토리, 파일 libfoo.so (공유 라이브러리) 또는 libfoo.a 중 하나에 대한 에 다음의 -Ldir 옵션을 사용하여 정적을 지정 디렉토리에서 먼저 검색 할 링커 지시 라이브러리). 둘 중 하나를 찾으면 검색이 중지됩니다. 동일한 검색 디렉토리에서 두 가지 또는 모두를 찾으면 libfoo.so을 선호합니다. 선택한 라이브러리가 발견되면 링크에 입력됩니다. 그렇지 않으면 링커는 cannot find -lfoo 오류를 표시합니다. 당신이 링커 검색 디렉토리 지정한 경우

그래서, - /home/me/other/project/Debug을 말한다 - 을하고 라이브러리에 상자가 입력 한 어쩌면 foo.o, bar.o, 다음 링커 파일을 검색 할 것입니다 :

/home/me/other/project/Debug/libfoo.o.{so|a} 
/home/me/other/project/Debug/libbar.o.{so|a} 
존재하지 않는

, 그리고 당신을 말할 것입니다 : cannot find -l{foo|bar}.o

-l 옵션 -l:name, WHI의 변형이 ch는 name이 검색 할 파일의이라는 정확한 이름 인 이라는 링커에 지시합니다. 그래서, 경우는 도서관에서 상자를 foo.o, bar.o을 제거하고 입력 :

-l:foo.o 
-l:bar.o 

상자, 당신의 연결은 (다른 오류를 금지) 성공합니다 링커 옵션에서.

물론

, foo.obar.o 그렇게 라이브러리 검색에서 그들을 찾을 수있는 링크를 강요, 오브젝트 파일이 아닌 라이브러리, 정적 또는 동적 중 하나입니다 것은 당신이 바로 그것을 할 경우에도 kludge의 비트입니다.

일부 응용 프로그램 프로젝트를 작성했으며 이제는 응용 프로그램에서 사용하는 단위 테스트 기능 및/또는 클래스에 대해 프로젝트를 작성하려고합니다.

  • 프로젝트 A : :

    이것은 표준 솔루션 프로젝트 인에 평범한 상황 구성 요소를 테스트 할 구현과 API를 내보내는 (정적 또는 공유) 라이브러리를 구축합니다.

  • 프로젝트 B는 : 애플리케이션, #include 헤더 파일을 -ing 프로젝트 A.에서 라이브러리를 링크를 구축
  • 프로젝트 C : 또한 단위 테스트 러너 #include 헤더 파일을 -ing (들)을 구축 및 프로젝트 A.에서 라이브러리를 연결하는

는 프로젝트 B와 C는 당신이 빌드 순서 프로젝트 설정하여이 작업을 수행 할 수 CodeLite에서 프로젝트 A에 의존합니다.

단위 테스트 러너의 연결 옵션을 응용 프로그램에서 생성 된 개체 파일과 함께 최신 상태로 유지하는 것보다 장기적으로이 솔루션을 유지 관리 할 수 ​​있습니다.