'gcc'에 해당되는 글 2건

  1. 2014.03.14 sysroot
  2. 2012.02.23 GCC, typeof
리눅스2014. 3. 14. 08:44


--sysroot=dir
Use dir as the logical root directory for headers and libraries. For example, if the compiler normally searches for headers in /usr/include and libraries in /usr/lib, it instead searches dir/usr/include and dir/usr/lib.

If you use both this option and the -isysroot option, then the --sysroot option applies to libraries, but the -isysroot option applies to header files.

The GNU linker (beginning with version 2.16) has the necessary support for this option. If your linker does not support this option, the header file aspect of --sysroot still works, but the library aspect does not. 


sysroot 는 컴파일 시에 필요한 header/lib 들을 찾는 경로에 대한 베이스 경로를 지정해 줄 수 있다.

여러가지 용도로 사용할 수 있겠으나, 다음과 같은 경우에 우선 쓸 수 있다.

1. gdb 로 디버깅 시, 타깃머신(gdbserver가 동작중)의 라이브러리들이 소스머신(gdb 동작중)의 라이브러리들과 매칭이 되지 않을 때.

2. toolchain이 소스와 제공(android경우)되어 그 toolchain을 써야 하나, bionic libc에서 지원하지 않는 라이브러리 함수를 어플리케이션이 사용해야 할 때.


위의 노란 부분은 gcc에서 sysroot 사용법에 대한 설명이다.  --sysroot=dir을 설정하면, 컴파일러께서는 dir/usr/include, dir/usr/lib 등으로 찾으신다.

Posted by code cat
리눅스/커널2012. 2. 23. 00:43

출처: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/


GCC 확장(?)의 하나로서, GCC는 변수에 대한 참조를 통해서 타입을 확인할 수 있다. 이런 방법을 흔히 'generic programming'이라고 부르며 비슷한 기능을 제공하는 것을 현재 쓰이는 언어들에서 찾아 볼 수 있다.[1]
Linux의 경우, typeof를 사용하여 타입 종속적인 작업, (예를 들어 min/max 를 구별)을 할 수 있다.

간단한 예를 들어보자.(/linux/include/linux/kernel.h)

보이는 바와 같이 _min1은 x가 어떤 타입이냐에 따라서 그 타입을 가지게 된다; _min2 역시 y에 따라 타입이 달라진다. 이렇게 타입을 가지게 되므로 크기를 비교할 수 있게 되며, 어떠한 타입이 들어와도 대응할 수 있게 된다.

[1] 제네릭 프로그래밍(Generic programming)은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식이다

'리눅스 > 커널' 카테고리의 다른 글

리눅스 커널 분석 시 아키텍쳐별 tag 및 cscope생성  (0) 2012.04.16
Virtual Linux Manager 정리 1  (0) 2012.03.18
Documentation/arm/booting  (0) 2011.09.25
Linux 3.0 Kernel  (0) 2011.07.31
커널선점  (0) 2011.05.01
Posted by code cat