전역 클래스를 만들고 해당 클래스에서 초기화 작업을 하도록 했다.

class XXX
{
public:
 XXX()
 { Init(); }
}

static XXX g_xxx;


이런식이다.

이렇게 해 놓으면 WinMain 이나 main() 이 호출되기 전에 자동으로 초기화 작업을 수행하도록 할수가 있다. 

문제는 이런 클래스가 엄청 (수십개?) 많은데, exe 나 dll 프로젝트에서는 이들이 다 호출이 잘 되는데, 엉뚱하게도 .lib 로 만들어서 dll 이나 exe 에 붙이면 호출이 안되는것이다.

아예 안되는것도 아니고 일부만 호출이 된다. 미치고 환장한다.

아직 원인을 몰라서 수동으로 호출하도록 바꿀 계획이다. 혹시 누군가 나와 동일한 문제를 가지고 해결한 사람이 있다면 여기에 답글을 달겠지.

=============================

2010/7/20 추가

* 모님이  http://stackoverflow.com/questions/1939899/how-do-i-make-an-unreferenced-object-load-in-c  링크를 찾았다고 알려 주셨다. (thx ^^)

결국 원인은 링커가 최적화를 위해서 static library 의 안쓰는 클래스는 자동으로 빼버리는 바람에 문제가 발생한 것. dll 로 만들거나, 컴파일 옵션을 조정하기는 곤란한 상황이니까 명시적으로 호출하거나 하는 방법으로 해결하는 수 밖에 없음.


Posted by 키플러
,