안녕하세요. molatk 입니다.

이번에 전 겨울 맞이로 해서....
그 좋은 윈도우를 버리고 리눅스로 완전 갈아 탔습니다. ㅋㅋ
메인 컴퓨터를 싹 밀고 우분투를 설치했습니다.
많이 사용해보지 않아서 무서웠지만....
좋은 툴이 굉장히 많더군요.!!

웹브라우저는 물론이고 개발 도구도 전혀 부족함이 없습니다.!!
(사실 개발 도구는 Visual Studio 진영이 너무 강력해서.... 부족합니다. ㅋㅋ)



툴 설명을 먼저 해드리겠습니다.
개발툴: Qt Creator
버전관리: RabbitVCS
Office: MS Office 2007(Wine으로 구동 중), Open Office(잠깐 써봤는데 좋습니다. 편해요ㅋㅋ)
웹브라우저: Chrome 
Design Tool: Visual Paradigm UML Community Edition
Messager: NateOn
그 밖에 Thunderbird, VirtualBox 등등 설치해서 사용 중입니다.

저 많은 프로그램을 띄워 놓고도 메모리는 26%밖에 사용하지 않네요.
3Gbyte * 26% = 780Mbyte 밖에
속도는 무지 빠르고ㅋㅋ

다른분들도 우분투에 도전해 보세요. ㅋㅋ
(근데 Word에서 원격 블로깅이 안됩니다. ㅠㅠ 더 찾아 봐야 할 듯.)



Bloger: moltak.net
Qt Creator 에서 외부 라이브러리를 사용하려면 옵션을 좀 설정해줘야 하는 군요.
좀 해멨습니다.

이번 블로깅의 목표는
Qt Creator를 이용해 프로젝트를 추가하고 gtest를 이용해 보자 입니다.

순서는 대략 아래와 같습니다.
1) Qt Creator 실행(설치는 이미 되어있다고 생각하겠습니다.)
2) 프로젝트 생성
3) 코딩
4) 프로젝트 파일 수정
5) 컴파일 & 링크
6) 실행


4)번을 보시면 아시겠지만. Qt Creator는 QMake를 사용하기 때문에 옵션을 조금 바꿔 줘야 합니다. 그것을 4)번에서 바꾸게 됩니다.


1) Qt Creator 실행, 프로젝트 생성 
(반드시 Qt Creator와 gtest가 설치되어 있어야합니다.)
Qt Creator를 실행하셔서 프로젝트를 생성합니다.

프로젝트 생성


이름은 마음데로 하시구요


저는 Qt Console Application을 선택했습니다.


프로젝트를 생성하실 때 Qt용 Console 프로젝트로 생성하시면 됩니다.

3) 코딩
위의 코드를 아래와 같이 변형해주세요.
코드를 보시면 아시겠지만 아주 간단한 코드 입니다.
다만 gtest를 사용하기 위해서 하나의 TEST를 추가해 주었습니다.

#include <iostream>
using namespace std;
#include <gtest/gtest.h>
TEST( test, test )
{
    EXPECT_EQ( 1, 1 );
}
int main(int argc, char *argv[])
{
    ::testing::InitGoogleTest( &argc, argv );
    RUN_ALL_TESTS();
    cout << "test" << endl;
    return 0;
}

4) 프로젝트 파일 수정
자 여기가 제가 제일 헤멘 곳인데요.
프로젝트 탭에 보시면 프로젝트명.pro 파일이 보이실 겁니다.
그것을 열어서 아래 한 줄을 추가해 주세요.

LIBS += "/usr/local/lib/libgtest.a" 를 추가해주세요.


LIBS += "/usr/local/lib/libgtest.a"

gtest는 ./configure && make && make install 하면 한번에 설치가 끝나고, 컴파일때 생성된 파일들은 /usr/local/lib 에 생성됩니다. 그래서 위와 같이 라이브러리 파일을 링크해주시는 겁니다.


5) 컴파일 & 링크 & 실행

테스트 통과 화면 && "test" 출력 화면


자 끝났습니다.


이상으로 Qt Creator에서 gtest를 사용하는 것을 해봤습니다.

저는 리눅스를 거의 처음 사용해보기 때문에 고수님들이 보시기에는 매우 쉬운 것들도 굉장히 헤매게 되네요.

그럼 이만 물러가겠습니다.




Bloger: moltak.net

이 글은 개인적인 경험을 바탕으로한 해결책들이다.
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