배움2012. 5. 23. 15:56

한동안 손을 놓았던 C++와 C 관련 내용을 다시 봐야 하는 일이 있어서 이것 저것 보다가,

오래전부터 기초가 없어서 고생하던, DLL (Dynamic Linking Library), LIB 관련 내용을 좀 찾아봤다.

이 과정에서 자연스럽게 컴파일러, 링커, 로더에 관련된 내용을 보았고 관련 내용을 잘 다루어 놓은 

웹 문서는 이전 포스트에 정리해 두었다.

 

그런데 결과적으로 마지막에 네임맹글링 이라는 부분에 다시 부딪치게 되는데, 

 

위에 내용을 차근 차근 밟아 오고 아래 포스트를 읽으면 참 많은 도움이 되는 듯 싶다.

 

*네임 맹글링 뭔지에 대한 설명

http://blog.naver.com/PostView.nhn?blogId=no1rogue&logNo=30095521394

*네임 맹글링을 좀 더 다른 어어와 비교한 설명

http://kldp.org/node/121134

 

 

'배움' 카테고리의 다른 글

[Study] 컴파일러, 링커, 로더의 이해  (0) 2012.05.22
[Tip] gitweb 설치 및 셋팅  (0) 2012.03.13
Posted by DANIEL.H.KIM
배움2012. 5. 22. 17:49

http://unix.co.kr/HOWTO/LinkerLoader-KLDP/intro.html


오랜만에 다시 Visual Studio를 접하면서, 기본 내용을 알고 싶어서 웹을 검색하다 발견한 Tutorial. 


관련 내용을 리눅스 기반으로 설명해 놨지만, 참 잘해 놓은 것 같다. 


웹에 넘쳐나는 대부분의 관련 글들은 위 링크에 있는 내용을 기반으로 작성된 것 같으니, 원본을!


'배움' 카테고리의 다른 글

[Study] 네임맹글링 (Name Mangling) 에 대한 이해  (0) 2012.05.23
[Tip] gitweb 설치 및 셋팅  (0) 2012.03.13
Posted by DANIEL.H.KIM
배움2012. 3. 13. 15:21
KLDP에 관련 내용이 위키로 올라와 있길래, 내용 참조해서 다시 정리-

설치
# apt-get install gitweb

프로젝트 설정

/var/cache/git 에서
# ln -s /path/to/repo.git repo.git
/var/www에서
# ln -s /usr/share/gitweb/* .


사용
http://localhost/cgi-bin/gitweb.cgi 에서 페이지 확인


참조
http://kldp.org/node/100726


TIPS
원격 저장소 설정
$ git config branch.master.remote ssh://server/path-to-repo/proj.git
위처럼 설정해주면 push, pull 명령어 뒤에 원격 저장소를 명시하지 않아도 됨

Posted by DANIEL.H.KIM
배움/자바(JAVA)2012. 3. 12. 19:21

코드를 짜다가 보니까, 여러명이 하니 이래 저래 보기가 힘들어 지는 것 같다.
회사를 다니다 보니, 여럿이서 프로젝트 하는 경우가 대부분이고,
이에 따라 코드를 작성하는 방법,  코멘트를 다는 방법 등을 알아야 할 필요가 있어 보인다. 

특히나 별로 중시 여기지 않았던 Java Convention에 대한 관심도 조금씩 늘고 있다.

여기, 잘 정리된 한장의 문서가 있길래, 웹 서핑 하다 보니-

 




그리고 Sun에서 공개한 문서 - 


나중에 코드 재생산(refactoring)을 할 때 참고해서 봐야 겠다.

아래는, 자바 Convention이 중요한 이유에 관한 부분, 아래 블로그에 번역된게 있길래, 공감이 가서, 가져왔다.
(출처 : http://kwangshin.pe.kr/blog/)

80% of the lifetime cost of a piece of software goes to maintenance.
Hardly any software is maintained for its whole life by the original author.
Code conventions improve the readability of the software, allowing engineers to understand new code more quickly and thoroughly.


소프트웨어를 개발하는 일련의 모든 과정에 들어가는 비용 중 80%가 유지보수에 쓰여진다.
소프트웨어의 유지보수를 그 소프트웨어를 직접 개발한 개발자가 담당하는 경우는 거의 보기 힘들다. 코드 규칙을 지키면 다른 개발자가 그 소스코드를 처음 보았을 때, 더 빠른 시간안에 완벽하게 이해할 수 있도록 도와주기 때문에, 소프트웨어의 가독성이 높아진다.

Posted by DANIEL.H.KIM
배움/리눅스(Linux)2010. 12. 10. 10:56
리눅스에서 기본 편집기인 vi 에디터가 우분투에서는 이상하게 동작 시, 메모장처럼 만들기


$ vi .exrc
// 홈디렉토리 에서 위의 명령으로  .exrc 파일을 만든다음 파일 내용에  아래내용을 입력

//i를 누르셔서, insert 모드로 만들고 vi 에디터 명령어들 참조하셔서, 다음과 같이 입력
set autoindent
set number
set bs=2
set nocp
    
 // 입력을 하셧다면  esc 키 누른 뒤 wq 눌러서 저장

$ source .exrc
 // 명령으로 설정을 로드 하시면 바로 적용이 됩니다.

Posted by DANIEL.H.KIM
배움/리눅스(Linux)2010. 12. 10. 10:40
1. Path가 어떻게 걸렸는지 알고 싶다면?

Shell 상에서 'export $PATH' 라고 입력하면 현재의 패스가 걸린 디렉토리가 전부 출력된다
혹은, 'export' 를 치면 전체 시스템상의 설정들 출력해 볼 수 있다.


2. 그럼 패스가 걸리지 않은 디렉토리에 있는 파일을 실행시키려면 어떻게 해야 하는가?

'/usr/local/bin /xxxxx' 처럼 절대 디렉토리를 적어주어 실행하거나 현재 디렉토리에 파일이 있다면 ./를 붙여서 ./xxxx 라고 실행.

 
3. 만일 패스를 추가해주고 싶다면 자신의 홈디렉토리의 .bash_profile을 에디트하면 된다.
 
vi ~/.bash_profile
   
'PATH=$PATH:$HOME/bin' 부분에서 콜론(:)으로 구분하여 덧붙이면 된다. '/usr/local/bin'을 추가해주고 싶으면 PATH=$PATH:$HOME/bin:/usr/local/bin 이렇게 해주고 저장을 하고 나온 후 'source ~/.bash_profile' 이라고 치면 고친 설정이 바로 적용된다.


참고 :
      #env : 모든 설정된 패스를 볼 수 있다.

 

4. 리눅스의 환경변수 관련 모음

    export 명령어를 이용해서 환경변수를 확인 및 수정할수 있다.

    export

    -> 환경변수 리스트를 보여준다.

    export 변수명=변수값

    -> 해당 변수명에 변수값을 등록한다.

    echo $변수명

    -> 변수명에 해당하는 환경변수값을 보여준다.

    export 변수명=$변수명:변수값

    -> 변수명에 변수값을 추가한다

Posted by DANIEL.H.KIM
배움/리눅스(Linux)2010. 12. 9. 10:47
repository : 리포지터리

정보기술에서, 리포지터리는 데이터 집합체가 보관되고 조직적인 방식으로 유지되는 대체로 컴퓨터 저장장치 내의 주요 장소이다. 이 용어는 물건을 넣어둘 수 있는 용기나 방이라는 뜻의 라틴어인 repositorium에서 유래되었으며, 물건들이 모여지는 장소를 의미한다. 이 용어는 어떻게 사용되느냐에 따라, 리포지터리는 사용자가 직접 액세스할 수 있거나, 또는 네트웍 내에서의 재배치나 배포를 위해 특정 데이터베이스, 파일, 또는 문서들이 획득되는 장소일 수 있다. 리포지터리는 저장장치의 일부 접근 가능한 장소 안에 들어가는 데이터 집합체 그 자체이거나, 또는 데이터를 선택적으로 추출하는 어떤 능력을 의미할 수도 있다. 관련되는 용어로는 데이터 웨어하우스와 데이터 마이닝이 있다.



Passphrase : 패스프레이즈

A passphrase 에 이용된 낱말 다른 원본의 순서는 이다 통제 접근 컴퓨터 시스템, 프로그램 또는 자료에. passphrase는 a와 유사하다 암호 사용법에서는, 그러나 일반적으로 추가한 안전을 위해 더 길다. Passphrases는 자주 사용한다 두 접근에, 그리고 가동을의 통제하기 위하여, 암호 서기법 프로그램과 체계. Passphrases는으로 passphrase를 사용하는 체계에 특히 적용 가능하다 암호화 키. 기간의 근원은 유례에 의하여를 가진 이다 "암호". passphrases의 현대 개념은 Sigmund N.에 의해 발명되는 믿어진다.




출처 : 위키피디아
Posted by DANIEL.H.KIM
배움/리눅스(Linux)2010. 12. 9. 10:45
* Super 사용자로 전환
su- 사용자명 : root 사용자가 일반 사용자로 저환
일반 사용자가 슈퍼 사용자로 전환

su -
passwd:


* su super user 의 암호 설정
gattaca@ubuntu-server:~$ sudo passwd root
[sudo] password for gattaca:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully


* Home folder로 이동
cd ~사용자 이름 : home의 자기 폴더로 바로 이동



* 우분투 터미널에서 한글 쓰기
apt-get install scim-hangul 나비를 설치하거나 scim-hangul 을 설치 하는 방법으로 터미널 한글 설정


* scp 명령어 사용법
scp authorized_keys hckim_0911@192.168.6.211:/home/hc_kim0911/.ssh

공용으로 사용하는 media 폴더 같은데에 넣어두고, cp 명령으로 복사 하는 방법

cp [source] [destination] 의 형식을 갖는다.

$ scp -P 1203 .emacs jaemng@192.168.10.10:/home/jaemng 혹은
$ scp -P 1203 .emacs jaemng@192.168.10.10:~

는 현재 디렉토리에서 .emacs란 파일을 원격 컴퓨터의 jaemng이라는 계정의 사용자 홈디렉토리로 복사하라는 의미이다. -P 는 포트지정 옵션


$ scp -P 1203 -r /programming/ftp jaemng@192.168.10.10:/home/jaemng

-r 옵션은 디렉토리를 복사하라는 의미 ftp디렉토리의 내용과 하위 디렉토리 전부가 복사 된다.


$ scp -P 1203 jaemng@192.168.10.10:/home/jaemng/.emacs .

원격 호스트의 .emacs란 파일을 현재 디렉토리로 복사를 의미한다.


* 현재 나의 프로필 출력
Who am I


* 현재 내가 있는 경로 출력
pwd 현재 경로를 출력한다


* sudo 란?
sudo -> super user do
Posted by DANIEL.H.KIM
배움/리눅스(Linux)2010. 12. 7. 11:16

Ubuntu 10.04 LTS 에서 /etc/X11/xorg.conf 의 존재 유무


질문 : 분투 10.04에는 기본적으로 /etc/X11/xorg.conf 파일이 없다고 하는데 사실인가요?

답변 :  xorg.conf 를 아래와 같이 생성하세요.

Ctrl + Alt + F1 를 눌러 tty1로 이동한 뒤
$ sudo service gdm stop 입력
$ sudo Xorg -configure

~/xorg.conf.new 파일이 생성되면
$ sudo mv ~/xorg.conf.new /etc/X11/xorg.conf
$ sudo shutdown -r now or $sudo service gdm start


Ubuntu에서, 해상도를 높이는데 필요한 글-
http://koreaubuntu.wordpress.com/2009/08/09/virtualbox-ubuntu-%ED%95%B4%EC%83%81%EB%8F%84-%EC%84%A4%EC%A0%95/

이 글을 보다 보면, xorg.conf 파일이 필요한데 위와 같은 과정으로 구할 수 있음.

kLDP에서 찾아낸 글 -

우분투10.10을 설치하고, 화면 해상도 문제를 해결하던 중에,

xorg.conf 파일을 설정해야 하는데 없어서 찾아 보니, 위와 같은 질문과 답변이 올라와 있었다.

참고 :)

Posted by DANIEL.H.KIM
배움/리눅스(Linux)2010. 12. 7. 11:10

vi 명령어 요약

1.시작
vi file vi를 시작하여 지정한 파일 편집
vi -R file 읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집
view file 읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

2.종료
:wq 데이터를 저장하고 종료
:q! 데이터를 저장하지 않고 종료

3. 시스템이 다운된 후에 되살리기
vi -r 되살릴 수 있는 모든 파일 이름 보여주기
vi -r file vi를 시작하여 지정한 파일 되살리기

4. 디스플레이 제어하기
^L 현재 화면을 다시 디스플레이하기
:set number 내부 줄 번호 디스플레이
:set nonumber 배부 줄 번호 디스플레이 않기

5. 마지막으로 지운 것 복사하기
p 마지막으로 지워진 것을 커서의 뒤/아래에 삽입
P 마지막으로 지워진 것을 커서의 앞/위에 삽입
xp 두 문자를 바꿈
deep 두 단어를 바꿈
ddp 두 줄을 바꿈

6. 패턴 검색
/rexp 지정된 정규 표현식에 대해 앞으로 이동
/ 이전의 패턴에 대해 앞으로 검색을 반복
?rexp 지정된 정규 표현식에 대해 뒤로 이동
? 이전의 패턴에 대해 뒤로 검색을 반복
n /나 ?명령에 대해 같은 방향으로 반복
N /나 ?명령에 대해 반대 방향으로 반복

7. 약어의 사용
:ab short long short를 long에 대한 약어로 변경
:ab 현재 약어 목록을 표시
:una short 약어 short를 표시

8. 줄 길이의 조정
r 문자를 뉴라인으로 변경
J 줄의 결합
:set wm=n 오른쪽으로 n문자 위치에서 자동적으로 줄 나눔

9. 커서 이동
h 커서를 한 칸 왼쪽으로 이동
j 커서를 한 줄 아래로 이동
k 커서를 한 줄 위로 이동
l 커서를 한 칸 오른쪽으로 이동
커서를 한 칸 왼쪽으로 이동
커서를 한 칸 오른쪽으로 이동
- 커서를 이전 줄의 처음으로 이동
+ 커서를 다음 줄의 처음으로 이동
커서를 다음 줄의 처음으로 이동
0 커서를 현재 줄의 맨 앞으로 이동
$ 커서를 현재 줄의 맨 끝으로 이동
^ 커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동
w 커서를 다음 단어의 첫 글자로 이동
e 커서를 다음 단어의 끝 글자로 이동
b 커서를 이전 단어의 첫 글자로 이동
W w와 같음(문장 부호 무시)
E e와 같음(문장 부호 무시)
B b와 같음(문장 부호 무시)
( 다음 문장의 처음으로 이동
) 이전 문장의 처음으로 이동
{ 다음 문단의 처음으로 이동
} 이전 문단의 처음으로 이동
H 커서를 화면 맨 위로 이동
M 커서를 중간으로 이동
L 커서를 맨 아래로 이동

10. 편집 버퍼를 통한 이동
^F 한 화면 아래로 이동
^B 한 화면 위로 이동
n^F n화면 아래로 이동
n^B n화면 위로 이동
^D 반 화면 아래로 이동
^U 반 화면 위로 이동
n^D n줄만큼 아래로 이동
n^U n줄만큼 위로 이동

11. 셸 명령 실행
:!command vi를 중단하고 지정한 셸 명령을 실행
:!! vi를 중단하고 이전의 셸 명령을 실행
:sh vi를 중단하고 셸을 실행
:!csh vi를 중단하고 새로운 C-셸을 실행

12. 패턴에 의한 치환
:s/pattern/replace/ 현재 줄의 치환
:lines/pattern/replace/ 지정한 줄의 치환
:line,lines/pattern/replace/ 지정한 범위의 치환
:%s/pattern/replace/ 모든 줄의 치환
1,$s/aaaaa/bbbbb/g 모든줄의 치환

13. 데이터 읽기
:liner file file의 내용을 지정한 줄 다음에 삽입
:r file file의 내용을 현재의 줄 다음에 삽입
:liner !command command의 결과를 지정한 줄 다음에 삽입
:r !command command의 결과를 현재의 줄 다음에 삽입
:r !look pattern 지정한 pattern으로 시작된 단어 삽입

14. 정규 표현식을 사용하기 위한 특수 기호
. 뉴라인을 제외한 모든 단일 문자와 대응
* 영 또는 그 이상의 선행 문자와 대응
^ 줄의 시작과 대응
$ 줄의 끝과 대응
\< 단어의 시작과 대응
\> 단어의 끝과 대응
[ ] 묶여진 문자중의 하나와 대응
[^ ] 묶여진 문자를 제외한 아무것하고나 대응
\ 이어지는 기호를 문자 그대로 해석

15. 줄 번호
nG 줄번호 n으로 건너뛰기
1G 편집 버퍼의 첫 줄로 건너뛰기
G 편집 버퍼의 마지막 줄로 건너뛰기
:map g lG g가 lG와 같도록 매크로 정의

16. 삽입
set noautoindent set nocindent
i 입력 모드로 전환, 커서 위치 앞에서 삽입
a 입력 모드로 전환, 커서 위치 뒤에서 삽입
I 입력 모드로 전환, 현재 줄의 앞에 삽입
A 입력 모드로 전환, 현재 줄의 끝에 삽입
o 입력 모드로 전환, 현재 줄의 아래에 전개
O 입력 모드로 전환, 현재 줄의 위에 전개

17. 편집하고 있는 파일을 바꾸기
:e file 지정한 파일의 편집
:e! file 지정한 파일의 편집, 자동 점검의 생략

18. 내용 고치기
r 단지 한 글자만 변경(입력 모드로 바뀌지 않음)
R 입력하는 대로 겹쳐 써서 변경
s 삽입에 의해 한 단어의 변경
C 커서의 위치로부터 줄 끝까지 삽입에 의한 변경
cc 전체 줄을 삽입에 의한 변경
S 전체 줄을 삽입에 의한 변경
cmove 커서부터 move까지 삽입에 의해 변경
~ 대,소문자 바꾸기

19. 고치기의 취소 또는 반복
u 편집 버퍼를 수정했던 마지막 명령을 취소
U 현재 줄을 저장
. 편집 버퍼를 수정했던 마지막 명령 반복

20. 문자 삭제
x 커서가 있는 문자 삭제
X 커서의 왼쪽 문자 삭제
D 커서부터 줄의 끝까지 삭제
dd 현재 줄의 전체 삭제
dmove 커서부터 move까지 삭제
dG 커서부터 편집 버퍼의 끝까지 삭제
d1G 커서부터 편집 버퍼의 맨 앞까지 삭제
:lined 지정한 줄의 삭제
:line, lined 지정한 범위의 삭제

21. 여러 줄의 복사와 이동
:linecotarget 지정한 줄을 복사하여 target 줄 밑에 삽입
:line, linecotarget 지정한 범위를 복사하여 target 줄 밑에 삽입
:linemtarget 지정한 줄로 이동하여 target 줄 밑에 삽입
:line, linemtarget 지정한 범위로 이동하여target 줄 밑에 삽입

22. 데이터를 처리하기 위한 셸 명령의 사용
n!!command n번 줄에서 command의 실행
!move command 커서부터 move까지 command 실행
!move fmt 커서부터 move까지 줄들을 형식 맞추기

23. 데이터 저장하기
:w 원래의 파일로 데이터를 저장
:w file 지정한 파일로 데이터를 저장
:w>> file 지정한 파일에 데이터를 추가

출처 : http://www.jointclub.net/about_unix/vi.html

Posted by DANIEL.H.KIM


계속 밍기적 밍기적 미루고 있던 그래픽스 숙제를 드디어 해내다!
하루만에 한거라 좀 허접한 면이 있지만.
그래도 할건 다 했다.
세완이형의 도움이 절대적으로 컸고,
이해해야 하는 부분이 좀 더 많다.

아무튼간.

소스와 결과물은 다음과 같다.
OpenGl의 각종 함수에 대한 정리도 같이 해 놓는다!

Result

사용자 삽입 이미지
















사용자 삽입 이미지

















'고' 자를 그리는 숙제였는데, 어떤 선을 긋는게 아니라.
점을 쭉 찍어서 그리는게 포인트이다!

Opengl을 사용해서, 그리는 숙제다!

사용되는 알고리즘으로는 Midpoint 알고리즘 (원 그릴 때,)
직선 알고리즘으로는 Breham 알고리즘 (맞나?;) 암튼 고거다!

키보드 입력을 받으면, 저기 고자 에서 아래 'ㅗ' 받침중 튀어 나온 부분만,
크림슨 색으로 칠해지는게 포인트다.

Soruce Code


참고 소스 : C에서 memset 이란 함수로 배열이나, 포인터를 초기화를 시킬 수 있다.
참고하면 좋을 블로그
http://www.gisdeveloper.co.kr/category/OpenGL?page=2
오픈 GL의 다양한 자료가 있다.


Tip

한가지 팁 : visual studio 2005 로 컴파일 하다가
눈에 띄는 단어가 있어서 정리해 둔다.
컴파일 과정 중에 매니페스토 라는 단어가 눈에 띄어서,
뭔가 하고 곰곰히 찾아 보니까,

매니페스토란 선거에서 사용되는 지키겠다. 뭔가 지키기 위한 포석 같은걸 의미한다고 한다.
즉, 표준화나, 공약, 기준점 제시등을 의미하는 듯 하다.


Posted by DANIEL.H.KIM