- 정말 오래전에 정리해둔 파일을 발견, 웹에 옮겨 둔다.
gcc
-c : 컴파일만
-nostdinc / - nostdinc++ : 표준 헤더파일을 디렉토리를 검색하지 않는다.
-o : 출력파일 이름
-static : 정정 링크를 해서 실행파일을 만든다.
-shared : 동적으로 링크
-soname : 동적 라이브러리를 만든다.
-O : 최적화 옵션
-S : 어셈블링을 하지 않는다 ( 어셈블 소스 코드 출력 )
-E : 프리프로세싱만 수행
-D : 매크로 디파인
-g : 디버깅 정보 포함
-ggdb : gdb전용 옵션 포함
-pg : profiling을 위한 정보 포함
-w : 모든 경고 메세지 억제
-Wall : gcc가 제공할 수 있고 유용한 모든 경고 메세지를 나타낸다
-werror : 모든 경고를 에러로 변환 컴파일을 중단한다
-pedantic : ANSI/ISO C 표준에서 요구되는 모든 경고를 나타낸다.
-pedantic-errors : ANSI/ISO C 표준에서 요구되는 모든 에러를 나타낸다.
-I : (대문자 i ) 헤더 파일을 검색하는 디렉토리 목록
-L : 라이브러리를 검색하는 디렉토리 목록
-l : (소문자 L) 함께 링크할 라이브러리
-nostdlib : 표준 라이브러리와 링크하지 않는다.
-V : 컴파일의 각 단계에서 사용하는 명령어를 보여준다.
.c : C언어 소스
.C .cc : C++ 소스
.i : 선행 처리된 C 소스
.ii : 선행처리된 C++ 소스
.S .s : 어셈블리어 소스
.o : 컴파일된 오브젝트
.a .so : 컴파일된 라이브러리
nm : nm [options] file
오브젝트나 바이너리에 인코딩된 모든 기호를 나열한다.
수행하는 함수 호출을 살펴보고, 라이브러리나 오ㄱ트 파일에 필ㄹ요한 함수가 존재하는지 확인하는데 사용
-C : 기호 이름을 사용자 단계 이름으로 변환, 특히 C++ 함수 이름을 읽을 수 있도록 만드는데 유용
ar : ar [options] file
정적 라이브러리 파일을 생성한다
r : 기존에 존재하면 대체한다.
c : 경고를 생략하고 라이브러리를 생성한다.
s : 멤버에 링크하는 맵을 생성하거나 갱신 (???)
q : 대체를 확인하지 않고 마지막에 파일을 추가
d : 라이브러리에서 오브젝트를 삭제
t : 목록 출력
ranlib : ranlib [options] file
라이브러리 자체에 색인을 저장한다. (ar -s file과 동일 ??)
strip
오브젝트 내의 심볼을 제거한다.
size
strings
파일내의 출력 가능한 문자들을 출력한다.
objcopy
objdump
ldd : ldd [options] file
file에 필요한 공유 라이브러리의 이름을 출력
-d 재배치를 수행하고 생략된 함수를 보고
-r 함수와 데이터 오브젝트를 위한 재배치를 수행하고 생략된 함수나 데이터 오브젝트를 보고
ldconfig : ldconfig [option] root_dir
/etc/ld.so.conf 에 지정된 공유 라이브러리를 위한 디렉토리 캐쉬 생성
ld.so ( 공유 라이브러리에 대한 링크 생성 관리를 위한 동적 링커/로더 )와 함께 동작한다.
-p : ld.so가 알고 있는 공유 라이브러리 디렉토리 (/etc/ld.so.cache)의 내용 출력
-v : 각 라이브러리의 버전 번호, 검색 디렉토리, 생성되거나 갱신되는 링크 나열
/etc/ld.so.cache 갱신
-r : / (root)로 사용할 디렉토리를 지정
ld.so (동적 링커/로더)
$LD_LIBRARY_PATH - 공유 라이브러리 목록 (콜론으로 구분)
$LD_PRELOAD - 먼저 로드되는 추가적인 사용자 지정 공유 라이브러리의 목록 (공백으로 구분)
두개의 환경 변수를 사용한다.
/etc/ld.so.conf는 ld.so가 사용하는 설정 파일로 공유 라이브러리를 검색하는 디렉토리 목록
( /lib, /usr/lib 는 표준으로 포함하지 않는다. )
/etc/ld.so.preload 는 $LD_PRELOAD 환경 변수의 디스크 기번 버전이라네
* 공유 라이브러리 생성
1. 컴파일시에 -fPIC (Position Independent Code : 어던 주소에서 링크하고 로드할 수 있는 코드) 옵션을 사용
2. 오브젝트 파일에서 디버깅 기호를 저거하지 않고 gcc의 -fomit-frame-pointer 옵션을 사용하지 않는다.
3. gcc의 -shared 와 -soname 옵션을 사용한다.
4. ld에게 인수를 전달하기 위해서 gcc의 -W 옵션을 사용한다.
5. gcc의 -l (소문자 L)옵션을 사용하여 C 라이브럴에 대해 분명한 링크를 한다.
ex)
gcc -fPIC -g -c libMylib.c -o libMylib.o
gcc -g -shared -Wl,-soname,libMylib.so -o libMylib.so.1.0.0 libMylib.o -lc
이렇게 하면 libMylib.so.1.0.0이라는 공유 라이브러리가 생성된다.
링크시에 -lMylib 옵션으로 링크가 가능하게 하기위해 심볼릭 링크를 생성한다.
ln -s libMylib.so.1.0.0 libMylib.so
/lib
/usr/lib
/usr/include
/usr/include/linux
/usr/i686-pc-linux-gnu/lib
/usr/i686-pc-linux-gnu/lib/ldscripts/
/usr/i686-pc-linux-gnu/gcc-bin/version/
'프로그래밍 > 툴' 카테고리의 다른 글
gdb를 이용한 리모트 디버깅 (0) | 2015.04.15 |
---|---|
Makefile 만들기 (0) | 2014.06.24 |
Makefile (0) | 2013.11.27 |
Windows 7 에서 user32.dll, kernel32.dll, gdi32.dll 의 위치 (0) | 2013.05.21 |
[wxWidgets] 설치 with mingw32-gcc (0) | 2011.12.17 |