weak symbol 으론 서로 다른 타입의 외부참조가 불가능 한데,
해당 타입을 넘나들면서 변수를 바인드 할 수 있다는점이다.
여기서 말하는 타입은 long 이냐 float이냐 하는 그런게 아니고,
function 이냐, obj 냐, 아니면 주소냐(타입을 표시하지않음) 하는 세가지 경우를 말하는 것이다.
그리고 또 재밌는게,
로드 타임의 심볼참조가 컴파일타임에 이뤄질수는 없지만,
해당 규칙에 대해서는 이미 결정이 된거같음.
gcc a.c ./b.so 라고 해뒀을때 (첨엔 타입을 동일시 해놨음)
그거를 b.so를 멋대로 심볼타입을 obj -> function 으로 바꿔도 여전히 해당 참조규칙이 유효함.
재컴파일하면 당연히 weak symbol 이 자기 자신한테 바인드 되고
음 이런거까지 일반화하긴 귀찮고 걍 경험으로 해결보면 될듯
음... extern 의 정확한 효과는 , comm 대신 undef 으로 바꾼다고 보면 명확한거고, 본문은 그 효과에 대한 내용 ㅇㅇㅇㅇ
c가 절차지향이라는 게 먼지 모르는구나...