무한사랑...무한...infinite...의 세계로...어서오세요…

예수님의 사랑은 무한사랑

하나님은 무한한 존재

성령님은 무한한 Spirit…

이게 무슨말인가?

ㅎㅎㅎㅎ

암튼...무한 리눅스의 세계로 들어가 봅시다.

ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ




리눅스의 root 밑에 있는 녀석들은 각자 역할이 있는 것 같다..

아니 있다.


그중에 …


/lib

라는 녀석은…..


“시스템에서 공유하여 같이 사용하는 라이브러리가 들어가 있는 곳”이란다.


그런데 … /lib 디렉토리안에…..엄청나게 많은 디렉토리가 들어가 있다…



/lib

├── GConf

├── ModemManager

├── NetworkManager

├── X11

├── abrt-java-connector

├── alsa

├── alsa-lib

├── ao

├── apr-util-1

├── audit

├── avahi

├── bind99

├── binfmt.d

├── bluetooth

├── brltty

├── ccs

├── cifs-utils

├── cmake

├── colord-plugins

├── colord-sensors

├── crda

├── cups

├── debug

├── device-mapper

├── dleyna-1.0

├── dleyna-server

├── dracut

├── dri

├── ebtables

├── elfutils

├── empathy

├── enchant

├── eog

├── epiphany

├── evince

├── evolution

├── evolution-data-server

├── farstream-0.2

├── fipscheck

├── firefox

├── firewalld

├── firmware

├── folks

├── freerdp

├── frei0r-1

├── fs

├── gallium-pipe

├── games

├── gawk

├── gcc

├── gconv

├── gdk-pixbuf-2.0

├── gedit

├── gettext

├── ghostscript

├── gio

├── girepository-1.0

├── gjs

├── glusterfs

├── gnome-calculator

├── gnome-documents

├── gnome-keyring

├── gnome-online-miners

├── gnome-settings-daemon-3.0

├── gnome-shell

├── goa-1.0

├── grilo-0.2

├── grub

├── gs-plugins-8

├── gssproxy

├── gstreamer-1.0

├── gtk-2.0

├── gtk-3.0

├── guile

├── gupnp-dlna

├── gutenprint

├── gvfs

├── httpd

├── i686

├── iscsi

├── java

├── java-1.5.0

├── java-1.6.0

├── java-1.7.0

├── java-1.8.0

├── java-ext

├── jvm

├── jvm-commmon

├── jvm-exports

├── jvm-private

├── kbd

├── kdump

├── kernel

├── krb5

├── ldb

├── libcanberra-0.30

├── libgphoto2

├── libgphoto2_port

├── libgpod

├── libkkc

├── liblangtag

├── libnfsidmap

├── libpeas-1.0

├── libpinyin

├── libproxy

├── libreoffice

├── libtranslit

├── libuser

├── libv4l

├── libvirt

├── libxslt-plugins

├── libzhuyin

├── lksctp-tools

├── llvm

├── locale

├── lua

├── m17n

├── man-db

├── mission-control-plugins.0

├── modprobe.d

├── modules

├── modules-load.d

├── mozilla

├── mutter

├── nautilus

├── nss

├── open-vm-tools

├── openssl

├── openvpn

├── org.gnome.Characters

├── os.release.d

├── p11-kit

├── packagekit-backend

├── pam_pkcs11

├── perl5

├── pkcs11

├── pkgconfig

├── plymouth

├── pm-utils

├── polkit-1

├── pppd

├── pulse-7.0

├── pulseaudio

├── purple-2

├── python3.4

├── qt4

├── qt5

├── realmd

├── redland

├── rhythmbox

├── rpm

├── rpm-plugins

├── rsocket

├── rtkaio

├── rygel-2.6

├── samba

├── sane

├── sasl2

├── seahorse

├── security

├── shotwell

├── silc

├── speech-dispatcher

├── speech-dispatcher-modules

├── sse2

├── sssd

├── stunnel

├── sushi

├── sysctl.d

├── systemd

├── sysusers.d

├── tc

├── tcl8.6

├── telepathy

├── tls

├── tmpfiles.d

├── totem

├── tracker-1.0

├── udev

├── vdpau

├── vte-2.90

├── webkit2gtk-4.0

├── xorg

└── xtables

184 directories


총 184개의 디렉토리가 있네….뭐이리 공유해서 쓸게 많은겨….


음…. /lib/modules/ 밑에 있는 파일이 뭔가 확인해보니… .ko 파일 같이 커널에서 사용하는 모듈들인것 같네요..



[root@localhost kernel]# tree `pwd`

/lib/modules/4.2.5/kernel

├── Documentation

│   ├── connector

│   │   └── cn_test.ko

│   └── filesystems

│       └── configfs

│           ├── configfs_example_explicit.ko

│           └── configfs_example_macros.ko

├── arch

│   └── x86

│       ├── crypto

│       │   ├── crc32-pclmul.ko

│       │   ├── crc32c-intel.ko

│       │   ├── glue_helper.ko

│       │   ├── salsa20-i586.ko

│       │   ├── serpent-sse2-i586.ko

│       │   └── twofish-i586.ko

│       ├── kernel

│       │   ├── cpu

│       │   │   └── mcheck

│       │   │       └── mce-inject.ko

│       │   ├── iosf_mbi.ko

│       │   └── test_nx.ko

│       ├── kvm

│       │   ├── kvm-amd.ko

│       │   ├── kvm-intel.ko

│       │   └── kvm.ko

│       ├── oprofile

│       │   └── oprofile.ko

│       └── platform

│           └── iris

│               └── iris.ko

├── crypto

│   ├── 842.ko

│   ├── ansi_cprng.ko

│   ├── anubis.ko

│   ├── arc4.ko

│   ├── async_tx




암튼….


/lib

시스템 전체적으로 같이 공유하고 싶은 놈들이 들어가는 방(디렉토리,폴더...)인것이죠~~!!!


흐흐흐. 이번글은 여기까징~~~

무한 드리볼~~


[참고]

http://egaoneko.github.io/os/2015/05/24/linux-starter-guide-3.html

http://lintut.com/use-tree-command-in-linux/


내가 설치한 Fedora 에서 uname -r을 하면 다음과 같이 보인다.

[test@localhost ~]$ uname -r

4.2.5-300.fc23.i686+PAE


그런데 문제는 맨뒤에 붙어 있는 +PAE라는 녀석이다.



메뉴얼에 다음과 같이 되어 있어서....따라하면..에러가 발생한다…


[root@localhost test]# dnf install kernel-devel-`uname -r`

Last metadata expiration check performed 0:00:32 ago on Tue Nov 17 20:34:15 2015.

No package kernel-devel-4.2.5-300.fc23.i686+PAE available.

Error: Unable to find a match.


kernel-devel-4.2.5-300.fc23.i686+PAE 라고 하는 패치지가 없다는 것이다.

그런데 +PAE를 제거하고 하면 잘된다…



[root@localhost test]# dnf install kernel-devel-4.2.5-300.fc23.i686

Last metadata expiration check performed 0:02:11 ago on Tue Nov 17 20:34:15 2015.

Package kernel-devel-4.2.5-300.fc23.i686 is already installed, skipping.

Dependencies resolved.

Nothing to do.

Complete!

이바라...잘되지 않는가?


왜?


dnf install kernel-devel-`uname -r` ← 이렇게 하라고해서 나를 고생시킨것인가?



+PAE는 뭔가?


구글링해보자…


물리주소확장(Physical Address Extension, PAE) 을 지원하는 커널인지 아닌지를 표시하는거란다.

물리주소 확장이란, 4기가바이트이상의 메모리를 32비트 시스템에서 사용할 수 있도록 하는 장치를 말한다.^^

참고 : https://ko.wikipedia.org/wiki/%EB%AC%BC%EB%A6%AC_%EC%A3%BC%EC%86%8C_%ED%99%95%EC%9E%A5




자...리눅스 커널을 빌드해라~!


왜냐고? 그냥~~

이유는 없다…


Just do it~!

그냥 하는거다…

그냥 하는 것이 이유다…

아니 난 리눅스 천재니까~~!!

흐~


리눅스 이~녀석~~~




  1. 우선 커널 소스를 받아온다.

  2. .config 파일을 복사한다.

  3. make 한다. (2시간정도 걸림)

  4. make modules 를 한다.

  5. make modules_install 을 한다.

대충 말하면 이렇게 한다…

자세한 정보는 다음 이곳들을 보며 대충알 수 있습니다.

귀찮아서리~~~

아주 친절하게 설명할 에너지가 없네유~~


http://emzei.tistory.com/m/post/153

http://blog-wk.blogspot.kr/2010/08/blog-post_29.html

http://blog.daum.net/bagjunggyu/138


제가 헤맨것만 설명을 드리면..

성공하기까지..몇일이 걸렸습니다. 이런;;;


.config 파일의 중요성을 몰랐어요..

.config 파일의 커널구셩내용이 적혀 있는데.

현재 작동중인 커널 구성에서 크게 달라지면 큰일 납니다.

부팅이 안되니까요…


.config를 대충만들면...결국 이 화면을 보게 될것 입니다. 저처럼 ㅋㅋㅋㅋ

.config 를 무시하지 마세요~~!!


요령은 현재 잘 작동중인 커널의 .config 을 사용하라..

이것은 구굴링하면 설명은 찾을 수 있어요…


아니 설명해 드릴꼐요..

https://help.ubuntu.com/community/Kernel/Compile ← 아주 잘 설명하고 있내요~~영어로~~ㅋㅋ



cp -vi /boot/config-`uname -r` .config

이게 제가 볼텐 커널 빌드시 핵심중의 핵심이라고 생각합니데이~~


일단 카피해놓고

이 구성중에서 변경을 해야쥐~

쌩짜(new)에서 구성하는 것은

저 같은 쪼가 리눅서에게는

불가능한일입니뎅~~


암튼 .config만 잘 되어 있으면

이제 빌드하면 됩니데이~~


참고로 밑의 그림은.말입니다.

제가 테스트한 페로라의 현재 /boot 디렉토리 밑에 있는

현재 커널의 .config 파일입니다.

빨간박스 안이 말입니다.~~~~~~



암튼 그러고 나서

그냥

바로~


make

해버리면 됩니다.


그리고 2시간 정도 기다립니다.


그리고 나서..다음 명령을 실행시켜주면...

  • make modules

  • make modules_install

  • make install


되는것입니다.



[root@localhost linux]# make modules

 CHK     include/config/kernel.release

 CHK     include/generated/uapi/linux/version.h

 CHK     include/generated/utsrelease.h

 CHK     include/generated/bounds.h

 CHK     include/generated/timeconst.h

 CHK     include/generated/asm-offsets.h

 CALL    scripts/checksyscalls.sh

 Building modules, stage 2.

 MODPOST 2878 modules


위 화면은 말입니다…

make modules

실행 결과입니다.


2878개...모듈...이 있더구만요~~





바뀌었다…

커널 버전이 바뀐것입니다.

위 화면은 제가 새로 만든 커널로 부팅한 결과화면입니다~


좀더 더~~

친절하고 꼼꼼하게

설명했어야 하는디~

죄송합니다~~




[참고]

http://emzei.tistory.com/m/post/153

http://blog-wk.blogspot.kr/2010/08/blog-post_29.html

http://blog.daum.net/bagjunggyu/138

https://help.ubuntu.com/community/Kernel/Compile



[결론]

결론은…

글을 꼼꼼히 읽자이종~~;;;;;;

다 설명에 있었습니다.


.config 복사해서 하라고

그 문장을 제가 과감하게 무시했습니다.


할렐루야~~



흐…..

음….

모든 프로세스를 보고 싶다고….


ps명령으로는 다 안보여~~~!!!


고작 두개 밖에 보이질 않아..


이게 전부가 아닐꺼야…



[root@localhost ~]# ps --help simple


Usage:

ps [options]


Basic options:

-A, -e               all processes

-a                   all with tty, except session leaders

 a                   all with tty, including other users

-d                   all except session leaders

-N, --deselect       negate selection

 r                   only running processes

 T                   all processes on this terminal

 x                   processes without controlling ttys




닥치고…^__^

-ef를 가장 많이 사용한다고~!!


“다 귀찮고… ps -ef 만 할꺼야ㅎ~ㅋ~”


-e 옵션은 모든 프로세스를 표시해주는 옵션이며,

-f옵션은 전체경로로 프로세스를 표시해주는 옵션이다.




자 따라 해보세요^^



ps -ef


일단 이거면 충분합니다.


그리고 내가 찾는 녀석이 있는지 확인하기 위해서


ps -ef | grep test

파이프 | 그리피 grep 를 사용하면 환상적입니다.^^


좌충우돌 미친감자의 이것저것 개발 이야기

^_______항상웃어_______^


C++ 이야기

struct  

class

차이점


“struct가 함수를 가질 수 있다고~!”



오늘도 강백호 같은 미친감자는

농구천재 서태웅과 같은 C++천재에게

가다간다…


C++천재에게..미친감자는 이렇게 물어본다.

도대체 객체지향은 뭐야?”


“객체지향?”

“객체지향을 그렇게 알고 싶어? 미친백호?ㅎ~”

“그럼 class와 struct의 차이점을 이야기 해봐 백호~”





“C++에서 구조체 struct클래스 class의 차이가 뭐가 있는지 말해봐~~~~~~~”


농구천재 아니 C++천재 서태웅은

강백호에게 물어보았다.


단순무식한 강백호…

이렇게 대답한다…


“글자가 다르지~~!!”


이런 바보~~!!!!;;

바보 강백호~!


struct도...함수 메소드(method)를 가질 수 있다고..

class도 메소드를 가질 수 있고~!

몰랐어 강백호~~!!


struct는 무조건 public속성으로 변수와 method가 생성되고

class는 무조건 private속성으로 변수와 method가 생성되는거야~~!!




struct Test

{

int a;

void f()

{

printf("struct test ");

}

};


이렇게 만들면~~

sturct에 변수와 함수(method)만들면

기본 속성이 public으로 만들어 지는 것입니다.

다음과 같이 생성되는 거죠~~!!


struct Test

{

public:

int a;

void f()

{

printf("struct test ");

}

};





반대로 class에 변수와 함수를 만들면...


class Test2

{

int a;

void f()

{

printf("class test ");

}

};


struct와 반대로… private로 만들어지는 것입니다.

즉, 기본적으로는 외부에서 class의 어떤 멤버에게도 접근을 할 수 없어요~~~~~~

굉장히 철학적이죠~~~

class라는 녀석~~~

모든것을 감추는 녀석이죠………

직접 public: 이라는 명시를 해주지 않는한…

모든 멤버 변수 멤버함수다 접근할 수가 없죠~~!

몰랐죠? 몰랐죠?

ㅋㅋㅋ



class Test2

{

private:

int a;

void f()

{

printf("class test ");

}

};


그렇습니다. class라는녀석은 기본으로 만들어지는 변수와 함수는 외부에서

접근할 수 없는 private로 만들어지는 것입니다.


알겠어?

강백호~~!!


무식쟁이 강백호~~!!

이런것은 기본이야~~!


니 팔뚝 굵다…

서태웅~



오늘은 여기까지..

음..이런이야기를 해고 싶어서 이 글이 만들어고 지고 있다.

struct라는 녀석 때문인것이다.


C언어만 하던 친구들은 struct가 class와 동일하고

method~ 즉, 함수를 가실 수 있다는 사실조차도 모르는 경우가 너무 많다….


“아니 struct가 함수를 가질 수 있다고~!”

라고 하며

놀란다…



하지만, C++에서 struct라는 녀석은 기본요소의 속성이 public이라는것 말고는

class와 그냥 동일하다는 것이다.





version 0.0.1 : 20151030 : 처음 작성

version 0.0.2 : 20151030 : 업그레이드 시도흐~





자 오늘은 말이죠…

오늘도 포스팅 해야죠~~!!


미친감자입니다.


미친감자의 호기심나이는

중학교 2학년이고 싶습니다.


디자이너 앙드레김의 이야기입니다.

음..앙드레김의 성공비결을 물어보았던 것으로 기억합니다.

그랬더니, 앙드레김은 저는 항상 중학생의 호기심으로 살아가고 있다고.

인터넷에서 관련 내용을 찾아보려고 했는데 안나오네요..

찾아서 링크 걸어드리겠습니다.


암튼 중요한것은….

생각이 죽는순간이 죽는것입니다.

나는 못해 난 나이가 너무 많아…

이런 생각이 문제인거였습니다.

암과 같은 생각입니다.

이 생각들은 바로 잘라내어야 합니다.

그렇지 않으면, 이 생각으로 인해 그 어떻것도 못하게 됩니다.


결국!!

이 인생은 선순환과 악순환 둘밖에 없습니다.

선순환으로 만들어주는 생각을 붙잡아야 합니다.


자..미친감자의 설교는 여기까지..


자….리눅스

잡아 먹어봅시다.

아흥~~리눅스 너를 잡아 먹으리라~~!


음 오늘의 볼론은…

리눅스에서 파일 내용을 뒤지는 방법이 있을까요?


있습니다.


grep

그랩

그랩이라고 읽는것 맞나?


그랩이라는 녀석으로 파일의 내용을 뒤질 수 있습니다.




grep -r "찾을 문자열" ./*


grep -r "jesus" ./*

현재경로 밑으로 aaa문자열이 있는

파일을 다 찾아~~~!!!



쉽죠…


grep 라는 명령이 있어….

참 다행이네요..


오늘은 여기까쥐~~


오늘도 승리합시다.

꼭 승리합시다.

만번 이상씩.. 외칩시다….

나는 할 수 있다고…..

절대긍정의 마음으로

절대믿음으로 이 가상의 세계에서

속지 말고 진짜의 세계를 경험합시다. (이게 무슨말이냐고요^^? 흐~~

미친감자의 신앙고백입니다. ^^ 미친감자는 예수쟁이거든요^^)





안녕하세요 미친감자 김주생입니다.


2015년 10월 8일은…(저녁 7시 경~~)


저는 또….재미없는 CPU에 대한 아주 기초적인 이야기를 했습니다.

고맙습니다. 여러분….들어주셔서^___^



세그먼트 레지스터에 대해서 이야기를 했네요…


기존에 했던 이야기 반복하고….말이죠~~~!!!


점점 지겨워 질 수 있는데….이럴 때 일 수 록……………...더 열심히 하셔야 합니당~~!

그래야 나중에 OS라도 만들 수 있어용~~


OS만들어서 뭐하냐고요???

ㅋㅋ그러게요…..


내가 만든 OS를 누가 사용이나 해줄까요?


그런 관점에서 OS를 생각하지 말고...그냥 CPU라는 녀석과 친해진다는 관점으로 보면…

앞으로 여러분 인생에(?) 많은 도움이 될것입니다.


리버서(역공학자)가 된다거나 포렌식 전문가가 된다거나 하실 경우에는

저에게 지금 배우는 내용이 엄청나게 도움이 될것임이 분명합니다.


여러분들의 초상권을 보장하기 위해 저는 기본적으로 모자이크를 해드립니다.^^(이게 더 이상한가???)



세그먼트 레지스터~~

세그먼트…(Segment)


사전적 의미중 제가 맘에 드는 의미는 ‘조각’입니다…

메모리를 조각으로 관리하기 위한 것입니다..


Segment에 있는 의미들이다.

출처 : http://endic.naver.com/enkrEntry.nhn?sLn=kr&entryId=8432d45409344666a247d0003f11b135#VerbO




덩어리라는  의미가 더 좋을 것 같네요~~~!! 덩어리는 의미는 없네요..이런

아이들에게 ‘덩이리’라고 했는데…’부분’이라는 의미가 가장 적합할 것 같네요…


i386이라는 CPU에는 여러 레지스터가 있어요…


레지스터란 뭐냐? 라고 하시면…


음.. 설명해 드려야죠~~!! 암용~!!!


명사적 의미로…..

[C] (이름・항목 등을 적은 공식적인) 기록[등록/등기]부, 명부


교구 기록부 → a parish register

선거인 명부 → the electoral register

호텔 숙박계 → the hotel register

흐흐흐 이렇게 register라는게 일상에서 사용됩니당~~!!


출처 : http://endic.naver.com/enkrEntry.nhn?sLn=kr&entryId=bdf7105431d8445fb60cee71affdbce1&query=register


그런데...CPU에서 register는...결국….

출처 : https://courses.engr.illinois.edu/ece390/books/artofasm/CH04/CH04-1.html#HEADING1-42

이런 이름을 가진 녀석들이고….

이 CPU에서 레지스터는

<-- 이 녀석^^에게 있어서 레지스터는

CPU를 사용하기 위해 필요한 값들을 저장하는 메모리같은 녀석입니당~~!


이중에서도… 세그머트 레지스터(Segment Register)는 다음 녀석들이종~!!


CS, DS, ES, FS, GS, SS

음. 이 녀석들이 나중에 설명할 것 이지만…………………

결국 GDT라고 하는 녀석을 가르키는 인덱스 역할을 한다는 것~~!!


ㅋㅋ 아직 GDT에 대한 설명을 잘 하지 않았는데….. GDT라는 용어를 써버렸네요…


암튼 인텔 계열 CPU..!! X86계열의 경우는 이렇게 되어 있습니당…


저도 잘을 모르지만...ARM에도 레지스터가 있지 않겠습니까???

한번 구글링해보겠습니당~!


출처:http://pds10.egloos.com/pds/200905/25/98/d0002098_4a1a81d8c9f79.jpg


구글링해서 찾은...자료인데...이곳에는 세그먼트 레지스터 같은 것은 없군요…


출처 : http://learnlinuxconcepts.blogspot.kr/2014/06/arm-architecture.html

다시 구글링해보았지만.. ARM CPU에는 세그먼트 레지스터 따윈(?) 보이지 않는군요…


오늘은 여기까지…


흐…

왜이리 시간이 없나?















오늘은 googletest라는 녀석을 사용해보록 해보죠...

먼저.....다음 웹페이지를 들어가봅시다.


https://code.google.com/p/googletest/ <-- 이곳에 들어가보니 github페이지로 가보란다.;;;;


아니 이런… github에있다는 것이다……...

https://github.com/google/googletest/tree/master/googletest

어디에서 다운로드를 받을 수 있단 말인가?



일단 닥치고..(?^^^) 헤더랑 lib만 있으면 된다…

그런데 어디에서 받을 수 있는지….


아니 이런…


일단

https://github.com/google/googletest/tree/master/googletest 에 들어가서..저 밑 화살표를 다운받아보자….



음….



뭐지?

CMake가 있어야 하는가 보다…

에라 모르겠다...

할렐루야~

하자…

설치~~!!



CMake 의 홈페이지이다….

하단부에 보니..다운 받을 수 있는 곳이 있구만…

홈페이지 하단에 있는 버튼이다….


받자..받자…~~!!


음……..설치를 한다…

음…

이것은 CMake 아이톤이다. 삼각형이네..음...음….태극문향과 비슷하기도 하고…

무슨사상이 들어갔을까?

이상한 종교의 사상이 들어가지 않았겠쥐??

음…….설치하고 바탕화면의 것을 실행했더니...저런 놈이 나타난다….

소스파일이 어디있냐고?

빌드는 어디에 저장하냐고?

Grouped

Advanced

음…..

음….

음…

음….

일단 CMake설치했으니께…..


음….

다시 실행시켜보자…

https://github.com/google/googletest/tree/master/googletest



Using CMake

Google Test comes with a CMake build script ( CMakeLists.txt) that can be used on a wide range of platforms ("C" stands for cross-platform.). If you don't have CMake installed already, you can download it for free from http://www.cmake.org/.

CMake works by generating native makefiles or build projects that can be used in the compiler environment of your choice. The typical workflow starts with:

mkdir mybuild       # Create a directory to hold the build output.
cd mybuild
cmake ${GTEST_DIR}  # Generate native build scripts.

If you want to build Google Test's samples, you should replace the last command with

cmake -Dgtest_build_samples=ON ${GTEST_DIR}

If you are on a *nix system, you should now see a Makefile in the current directory. Just type 'make' to build gtest.

If you use Windows and have Visual Studio installed, a gtest.sln file and several .vcproj files will be created. You can then build them using Visual Studio.

On Mac OS X with Xcode installed, a .xcodeproj file will be generated.




음…

cmake

을………………………………...실행할 수 있다.


음…


mkdir mybuild       # Create a directory to hold the build output.
cd mybuild
cmake ${GTEST_DIR}  # Generate native build scripts.

오~~된다~~!!!


build가 되는 거 겠쥐~~!!!


Visual Studio 14 2015로 빌드한단다~~!!


컴파일러 찾았다!!라고 말한다.

ABI info 는 뭐냐?


PythonInterp...음…….파이션이 있어야 하는가?

음….

Build files have been written to

라고………...쓰여있네…

가보자…

음…

d:/mybuild~~로 가보자..


음…

.sln .vcxproj 파일 들이 생겼네…

이제 이 파일로 빌드를 하면 되는건가?(빌드가 만들어진게 아니고...빌드 파일이 만들어졌나보네…)



음…. 저 CMakeLists.txt 파일이 있어야 .sln .vcxproj 파일이 생성되는 구나~~!

음……………...


자 빌드해보겠습니다….

어여…..해보장~~!!!!!



음…

ALL_BUILD라는 녀석이 있네…

이놈을 빌드하자…~~!!


자 빌드 드려 ~~빌드~~!!!!


성공은 2개….

실패는 2개….

성공은 뭐고 실패는 뭐지????


음…...이런……………..실패 2개는 뭐지???



2>D:\googletest-master\googletest\include\gtest/internal/gtest-internal.h : error C2220: 경고가 오류로 처리되어 생성된 'object' 파일이 없습니다.

object 파일이 없다고???

뭐지???

경고가 오류로 처리되어 생성된 ‘object’파일이 없습니다.


2>D:\googletest-master\googletest\include\gtest/internal/gtest-internal.h : warning C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드 형식으로 저장하십시오.


음………표시할수 없는 문자가 있다고?

뭐냐????


음….


음...어떻게 하지?????

이런…


컴파일러 수준을 바꿔야겠다…


아니다. 구글링하자…(누군가 시행착오를 거쳤겠쥐….)


저기 저 옵션을 껴보자…..

‘아니요’로 말이다…. /WX-




1>------ 빌드 시작: 프로젝트: gtest, 구성: Debug Win32 ------

1>  gtest-all.cc

1>D:\googletest-master\googletest\include\gtest/internal/gtest-internal.h : warning C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드 형식으로 저장하십시오.

1>  gtest.vcxproj -> D:\mybuild\Debug\gtest.lib

========== 빌드: 성공 1, 실패 0, 최신 1, 생략 0 ==========


드디어 성공!!!!


흐…..

저 경고 warning은 그냥 무시하자……

음…


나머지 프로젝트 gtest_main도 …………….’경고를 오류로 처리’ 를 ‘아니요’로 하자…



1>------ 모두 다시 빌드 시작: 프로젝트: ZERO_CHECK, 구성: Debug Win32 ------

1>  Checking Build System

1>  CMake does not need to re-run because D:/mybuild/CMakeFiles/generate.stamp is up-to-date.

2>------ 모두 다시 빌드 시작: 프로젝트: gtest, 구성: Debug Win32 ------

2>  Building Custom Rule D:/googletest-master/googletest/CMakeLists.txt

2>  CMake does not need to re-run because D:\mybuild\CMakeFiles\generate.stamp is up-to-date.

2>  gtest-all.cc

2>D:\googletest-master\googletest\include\gtest/internal/gtest-internal.h : warning C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드 형식으로 저장하십시오.

2>  gtest.vcxproj -> D:\mybuild\Debug\gtest.lib

3>------ 모두 다시 빌드 시작: 프로젝트: gtest_main, 구성: Debug Win32 ------

3>  Building Custom Rule D:/googletest-master/googletest/CMakeLists.txt

3>  CMake does not need to re-run because D:\mybuild\CMakeFiles\generate.stamp is up-to-date.

3>  gtest_main.cc

3>D:\googletest-master\googletest\include\gtest/internal/gtest-internal.h : warning C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드 형식으로 저장하십시오.

3>  gtest_main.vcxproj -> D:\mybuild\Debug\gtest_main.lib

4>------ 모두 다시 빌드 시작: 프로젝트: ALL_BUILD, 구성: Debug Win32 ------

4>  Building Custom Rule D:/googletest-master/googletest/CMakeLists.txt

4>  CMake does not need to re-run because D:\mybuild\CMakeFiles\generate.stamp is up-to-date.

========== 모두 다시 빌드: 성공 4, 실패 0, 생략 0 ==========


드이어 빌드 성공했습니다…

뭐여????....한국어에서는 한번에 빌드가 안되는 것 같네요…..

왜그랬을까요???


한국 개발자들이………………..이 경고를 무시해주세요..라고 메일을 보내야 하는 건가?



음…

어떤 파일들이 생성 되었을까요?


gtest.lib라는 파일이 생성 되었다.

d:\mybuild\Debug 라는 폴더에 말이다.


빌드 구성이 총 4개로 되어 있네요….

  • Debug

  • MinSizeRel : 최소 사이즈로 만들어주는 구나~~

  • Release : Release 용~!

  • RelWithDebInfo : 디버그 정보를 가지고 있는 Release용~!


자…

이제 테스트 할 수 있을 것 같은디~~~~!


자.. gtester를 돌려보자…


음….




음…

이제 링크까지 왔다….

자…...lib 파일을 걸어주쥐~~!!




gtest.lib

이 놈을 사용하자…


음...이렇게 했더니…

또 에러가 발생한다…

이런..


심각도 코드 설명 프로젝트 파일

오류 LNK1169 여러 번 정의된 기호가 있습니다. gtest_test001 c:\users\jesus001\documents\visual studio 2015\Projects\gtest_test001\Debug\gtest_test001.exe 1

오류 LNK2038 'RuntimeLibrary'에 대해 불일치가 검색되었습니다. 'MTd_StaticDebug' 값이 'MDd_DynamicDebug'(gtest_test001.obj에 위치) 값과 일치하지 않습니다. gtest_test001 c:\Users\Jesus001\documents\visual studio 2015\Projects\gtest_test001\gtest_test001\gtest.lib(gtest-all.obj) 1

오류 LNK2005 "protected: __thiscall std::basic_ios<char,struct std::char_traits<char> >::basic_ios<char,struct std::char_traits<char> >(void)" (??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ)이(가) msvcprtd.lib(MSVCP140D.dll)에 이미 정의되어 있습니다. gtest_test001 c:\Users\Jesus001\documents\visual studio 2015\Projects\gtest_test001\gtest_test001\gtest.lib(gtest-all.obj) 1



음.. MTd MDd...음..어디에서 많이 본것이다…

멀티 쓰레드 용인지 아닌지를 선택하는 것이다…


음…

MTd 를 선택하고 다시 빌드….



1>------ 빌드 시작: 프로젝트: gtest_test001, 구성: Debug Win32 ------

1>  stdafx.cpp

1>  gtest_test001.cpp

1>d:\googletest-master\googletest\include\gtest\internal\gtest-internal.h : warning C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드 형식으로 저장하십시오.

1>  gtest_test001.vcxproj -> c:\users\jesus001\documents\visual studio 2015\Projects\gtest_test001\Debug\gtest_test001.exe

========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========



드디어 성공~~!!!ㅎㅎㅎㅎㅎㅎ

실행해보자…


드디어 성공!!!!!

ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ

흐……

gtester를 실행시켰다…..


음..그런데 어디가 테스트부분인지 알겠나?



TEST(GtestSampleTest, testSample) {

 EXPECT_EQ(1, 0); ← 이곳의 값을 틀리게 하면…….. 실패가 나옵니다.^^

}


이렇게~!!


1개를 테스트 했고………………..GtestSampleTset.testSample을 2ms동안….실행시켰고….

그놈은 실패했다는 것이다.~~!!흐흐흫….


음…...이놈을 가지고 테스트를 만들어야 한다….흐흐흐흐흐흐흐흐흐흐흐흐흐ㅡ흐흐



[참고 URL]

http://surpreem.com/archives/626#sthash.6OU7fBDf.dpbs

https://github.com/google/googletest/tree/master/googletest



+ Recent posts