프로그램 사용/gcc2026. 1. 29. 16:38

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
Posted by 구차니