ft_printf (3 일차)

hyungyoo·2021년 2월 16일
0

ft_printf

목록 보기
3/3

str et nbr

  1. -g -fsanitize=address
    마지막으로 했던 str함수에서 str에 NULL일때, segmentation fault가 나서.. 어디인지 찾을수가없었다...
    결국, 친구가말해줬던 옵션이 생각나서, 찾아서 해보니, NULL 선언전에 strlen함수에 넣었기 때문이었다!

-g -fsanitize=address

이 옵션을 넣으니, 어디서 부터 segmentation fault가 일어났는지를 다 보여주었다 ㅋㅋㅋㅋㅋ이제 하나하나 찾느라 디버깅은 안해도될듯...

  1. GCC 컴파일 옵션
ft_printf 과제를 진행하려면 이 전 과제로 만든 libft 정적 라이브러리를 사용해야한다. 어떻게 ft_printf 소스파일과 libft.a 라이브러리 파일을 함께 컴파일할 수 있는지 정리해보았다.

일반적으로 실행 파일을 만들 때는 소스 코드를 컴파일 하고 만들어진 obj 파일을 링커가 하나로 묶어 .out (윈도우는 .exe) 파일을 만든다. 정적 라이브러리를 사용하려면 링크 단계에서 링커가 .a파일도 같이 묶어서 하나의 .out 파일을 만들어야 한다.

즉, 컴파일에 성공해 만들어지는 .out 파일 (ft_printf 과제에서는 libftprintf.a 파일) 안에 lib의 내용이 모두 들어가게 된다.
  • -l 옵션 (소문자 엘)
    링크할 라이브러리를 명시하는 옵션이다.
    정적 라이브러리를 링크시키는데 사용되며 대상 라이브러리 파일의 이름에서 앞의 lib와 뒤의 .a를 때고 인식한다.
    예를 들어 libft.a 라이브러리 파일을 링크시키려면 -lft 로 옵션을 주면 된다.
    그렇다면 컴파일러가 라이브러리를 찾을 수 있도록 검색할 위치를 명시해 주는 작업도 필요할 것이다. 기본적으로 리눅스는 /lib, /usr/lib, /usr/local/lib 만을 검색해서 라이브러리를 찾는다. 그러므로 추가적으로 디렉토리를 검색하도록 하려면 아래의 -L 옵션을 사용하면 된다.

  • -L 옵션 (대문자 엘)
    라이브러리 위치를 정해주는 옵션이다.
    사용은 다음과 같이 -L<디렉토리명> 으로 한다.

$ ar rcs libftprintf.a libftprintf.o -L./libft -lft

출처
https://velog.io/@hidaehyunlee/외부-라이브러리-GCC로-컴파일-하기

  1. nbr
    두번째에 써놓았던것처럼, str과의 차이점이 조금있을뿐
    거의 같음!
    atoi쓰고 할줄알았는데; 쓸필요없이, 안에있는 코드 몇줄만 가져오면 되는것이었음

3줄요약

  • gcc에 옵션 넣으면, segmentation fault를 잡을수있음 😎
  • 정적라이브러리 사용을 위한 옵션 (-l, -L)
  • Header는 그때그때.. 만들자

관심 있을 만한 포스트

0개의 댓글