2006년 4월 3일 오늘의 뻘짓
Dev-C++로 dll을 만드는데, 뭔가 옛날에 컴파일된 dll보다 크기가 훨씬 줄어든 것 같아서 분석해 보니까 어째 임포트 테이블이 그대로 들어 있는 것이었다. "아닛? 분명 스태틱 링크 했는데 이게 우째 된 일이지?" 하고 귀신이 랩 하는 기분을 맛 본 다음에 한참동안 원인을 찾느라 개삽질했다.
어제 밤을 새고 오늘에서야 알아 낸 그 이유라는 것이 좀 웃긴데, 대충 설명해 보자면,
- Dev-C++로 dll을 만들 때는
dllwrap
이라는 걸 사용한다. 이 프로그램은 자기가 필요한 옵션만 취한 뒤 링크는g++
(나 따로 옵션으로 지정된 프로그램)으로 넘긴다. 즉ld
의 역할을 대신 하는 셈이다. ld
에서는-Bdynamic
/-Bstatic
이라는 옵션을 다이나믹/스태틱 링크에 사용하고,dllwrap
에서는 이 옵션을 인식하지 못 한다.g++
에서-dynamic
/-static
이라는 옵션만 지원한다. (정확하게 말하면ld
도-dynamic
등이 다 된다만)- 토끼군은 Dev-C++가 dll 링크에
ld
쓰는 줄 알고man ld
해서 처음 나오는-Bdynamic
/-Bstatic
옵션을 링크 옵션에 적어 버렸고,g++
는 이 놈을 인식하지 못 해서 모조리 다이나믹 링크해 버린 것이다. -_-;;;
그래서 -dynamic
/-static
으로 고치니까 잘 링크된다. 어쩐지 뭔가 안 된다 싶더니만... orz
결론: 토끼군은 아무리 발버둥쳐도 삽질과 뻘짓만을 반복할 뿐이다.