이 글은 개인적인 경험을 바탕으로한 해결책들이다.
100% 신뢰할수는 없으나, 적어도 나는 효과본 방법임을 미리 밝혀둔다.

본인은 단위테스트 도구로 c++unit을 쓰다, unittest++이 더 편한거 같아서 그쪽으로 옮겨갓다가
잠시 boost쪽도 써봣다.


문제는 다들 하나씩 문제가 있거나 뭔가 불편하다는 거엿다.
예를들어 c++unit과 boost는 테스트하기 위해 생산하고 관리할 코드가 산더미가 될수도 있었고
unittest++은 내가 몰라서 그런진 몰라도 테스트하기 껄끄러운 테스트케이스들이 있어서 좀 난감햇다.

하지만 어찌됫건 사용하기 편한건 unittest++이라 그쪽으로 계속 사용했는데...

최근 리눅스로 옮겨타서 뭔가 만들일이 있어서 netbeans를 쓰다 여기서 c++unit이 지원된다는걸 발견!
자동으로 코드도 만들어주니 잘 써먹으려 했으나 역시 몇가지 짜증나는 문제들이 있어서 안쓰기로 결정했다.

그러다 눈에 띈게 google test였는데...

이것도 사용하기 간편한 쉬운 단위 테스트 라이브러리라 일단 설치하고 쓰다보니 이거말고 다른걸 못쓰겟더라;;
(일단 능력 자체는 unittest++과 비슷한데, 더 쉽다. 쉽고 간단하다는게 아주 크다.)


어찌됫건 gtest를 쓰려다/쓰다 생기는 몇가지 문제를 해결하기 위한 트릭을 몇개 적어볼까 한다.



1.설치
일단 설치부터 난관인데...
우분투나 오픈수세같은 플랫폼의 gcc라면 그냥 아무런 생각도 하지 말고 

#./configure
#make
#make install

하면 된다.

설치위치는 /usr/local/ 이며, 라이브러리는 lib, 헤더는 include에 들어가 있다.

icc도 크게 다를건 없을꺼다.



2.컴파일이 안되요, 링커가 앙탈부려요
당연한 이야기지만 프로젝트 설정 같은데 보면 include설정하고 lib설정 있을 거다.
그걸로 설정하면 
헤더를 못찾겠는데요?, 라이브러리는 어딧나요?
같은 이야기는 대부분 사라진다.

넷빈의 경우 프로젝트 설정의 컴파일러 부분에 있는 include dir 부분과 링커의 librareies 부분을 만져주면 된다.
만약 full path 입력이 귀찮다면 환경변수 부분에 설정해 두고 입력하면 된다.

문제는 다음에서 발생한다.



3. undefined reference to `pthread_key_create' ..... 라는 형태로 링커 에러가 뜬다.
이거 아주 간단하게 해결된다.
gtest는 스레드 기반인듯한데...
당연하게도 -lpthread 를 붙여줘야 한다.

본인은 openmp 쓰느라 모르다가 어쩌다 딴거 테스트하다 본 에러라 쉽게 해결했다.


넷빈의 경우 프로젝트 설정의 링커 부분에 libraries 부분이 있는데 거기 들어가서 옵션 눌어 추가해주면 된다.


4. 실행파일이 libgtest.so.0 을 못찾겟단다
이거 의외로 해결하기 골치아프다.

실행파일을 ldd로 찍어보면 not found 찍히는데
/usr/local/lib 가면 libgtest.so.0 이녀석은 멀쩡하게 존제하고 잘 작동중이다.

왜이럴까?

결국 임시방편으로 ld_library_path로 쇼부치다(내가 리눅스를 아는 수준은 딱 이정도가 한계다;;) 

검색으로 다음과 같은 포스트를 찾아냇다.
http://www.openguru.org/2009/04/how-to-fix-shared-library-load-problem.html

맨 아래 보면 ldconfig를 만저서 해당 문제를 멋지게 해결해내고 있다.

저게 옳은 방법인지는 확실치 않지만, 어찌됫건 해결되면 장땡.



이로서 gtest준비는 끗~

이제 주 프로젝트와 여러개의 테스트 프로젝트를 굴리면서 프로그래밍을 하면 된다.

+ Recent posts