Linux/Compile & Link

    [Dynamic linker] ld.so / ld-linux.so* 의 동작 간단 분석 (작성 중)

    ld.so, ld-linux.so* 란 무엇인가? ld.so / ld-linux.so* 는 Dynamic linker 입니다. ld.so와 ld-linux.so*는 프로그램에서 필요한 Shared library를 찾고, 로드하는 역할을 합니다. Dynamic, 즉 동적으로 링킹한다는 말이 있다는 것은 정적으로 링킹하는 것도 있다는 뜻입니다. 두 가지가 어떻게 다르고 왜 필요한지도 알아볼 필요가 있습니다.

    정적 라이브러리 링크

    정적 라이브러리 링크 라이브러리 중 정적 라이브러리(static library)를 사용하는 경우가 종종 있다. 그리고 해당 라이브러리가 또 다른 (static library)를 Link 하는 경우가 있다. 이럴 때 문제가 발생하게 된다. 아래와 같이 어플리케이션이 필요로 하는 정적 라이브러리를 링크하게 되는데, 해당 라이브러리가 다른 정적 라이브러리를 링크하게 되는 경우이다. ** Application --> Static library 1 --> Static library 2 ** Application은 Static library 1의 존재만 알 뿐 2의 존재는 알지도, 알 필요도 없다. pkg-config를 이용한 경우 pc 파일에 정의 아래 libpalosalodp 의 pc.in 파일이다. # Pac..

    [gcc] 특정 코드에 최적화 속성 사용하기

    [gcc] 최적화 속성 사용하기 gcc를 컴파일러로 사용할 시 -O2, -O3와 같은 최적화 옵션을 자주 사용하게 됩니다. 특별한 경우에 특정 함수나 코드 구간에 대해서 특정 최적화 단계를 적용하고 싶다면 아래와 같이 진행합니다. 함수에 최적화 적용하기 void __attribute__((optimize("O0"))) func(void) { } 코드 범위에 최적화 적용하기 #pragma GCC push_options #pragma GCC optimize ("O0") //Write your code #pragma GCC pop_options 감사합니다.

    [gcc] Warning option 정리

    gcc 컴파일 옵션으로 많이 사용하는 -Wall , -Wextra 이외에 다양한 옵션들은 정리하고자 합니다. 옵션 설명 특이사항 -fstack-usage 컴파일러가 프로그램에 대한 스택 사용 정보를 함수 단위로 출력하도록 합니다. 함수의 이름, 바이트 수 등이 표기됩니다. x -Wframe-larger-than={len} 함수 프레임의 크기가 len을 넘어가면 Warning이 출력합니다. x -Wstrict-overflow=n -fstrict-overflow가 활성화 되어있는 경우에만 활성화됩니다. 컴파일러가 signed 오버플로우가 일어나지 않을거라 가정하고 최적화를 진행하는 경우에 Warning이 발생합니다. Wall에 포함 (-Wstrict-overflow=1) -Wlogical-op 표현식에서 논..