메아리 저널

오늘의 뻘짓

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

결론: 토끼군은 아무리 발버둥쳐도 삽질과 뻘짓만을 반복할 뿐이다.

이 글은 본래 http://tokigun.net/blog/entry.php?blogid=75에 썼던 것을 옮겨 온 것입니다.


(rev 1d46270eb038)