[C] 에러 /usr/bin/ld: /tmp/ccBuilil.o: in function `main':...:(.text+0x3b1): undefined reference to `shm_open'collect2: error: ld returned 1 exit status
2022. 4. 22. 23:33
문제/에러
shm_open이 정의되어있지 않음.
/usr/bin/ld: /tmp/ccBuilil.o: in function `main':
hw4_3.c:(.text+0x3b1): undefined reference to `shm_open'shm_open
collect2: error: ld returned 1 exit status
원인
shm_open을 POSIX 라이브러리를 포함해야 사용할 수 있는데, 그걸 포함 안시켜줬기 때문에 발생한 에러이다.
여기서, POSIX 라이브러리는 librt라는 라이브러리에 해당한다.
즉, librt라는 라이브러리를, 링킹할 때, 검색하게끔 만들어 주지 않아서이다.
(그래서 man페이지에, -lrt라고 쓰여있음.)
https://man7.org/linux/man-pages/man3/shm_open.3.html
해결방안
librt라는 라이브러리를, 링킹할 때, 검색하게끔 만들어 주자.
gcc 컴파일러 옵션으로, 가능하게 하다.
즉, 아래와 같이 이전->이후로 변경한다.
- 이전
$ gcc hw4_3.c
- 이후
$ gcc hw4_3.c -lrt
참고자료
https://stackoverflow.com/questions/48410966/undefined-reference-to-shm-open
https://stackoverflow.com/questions/9923495/undefined-reference-shm-open-already-add-lrt-flag-here
http://cloudrain21.com/two-ways-to-use-shared-memory