weak는 약한 애라 강한애가 오면 치환당한다.
tt.c 에는 a()함수가 weak로 존재하고
| $ cat tt.c #include <stdio.h> __attribute__((weak)) void a() { printf("a\n"); } void main() { a(); } |
t2.c에는 weak가 아닌 동일 이름의 함수가 있는데
| $ cat t2.c #include <stdio.h> void a() { printf("b\n"); } |
tt.c를 빌드해서 실행하면 weak 함수가 실행되서 a가 나오고
| $ gcc tt.c $ ./a.out a |
두개를 한번에 넣어서 빌드하고 실행하면 weak가 밀려나서 링크 시에는 strong이 붙어 b가 나오게 된다.
| $ gcc tt.c t2.c $ ./a.out b |
---
링커에서 처리하는거라 컴파일 단계에서 단일 파일에 있다면 중복 선언으로 에러가 발생하니 반드시 파일을 분리해야 한다.
| $ cat tt.c #include <stdio.h> __attribute__((weak)) void a() { printf("a\n"); } void a() { printf("b\n"); } void main() { a(); } $ gcc tt.c tt.c:4:6: error: redefinition of ‘a’ 4 | void a() { printf("b\n"); } | ^ tt.c:3:28: note: previous definition of ‘a’ with type ‘void()’ 3 | __attribute__((weak)) void a() { printf("a\n"); } | ^ |
'프로그램 사용 > gcc' 카테고리의 다른 글
| gcc cortex-a9 double형 neon 연산 가속 (3) | 2023.08.08 |
|---|---|
| gcc tree vectorize (0) | 2023.01.26 |
| gcc fstack-protector-strong (0) | 2022.12.06 |
| gcc vectorization 실패 (0) | 2022.06.02 |
| gcc / 문자열 선언 (0) | 2022.03.17 |
