vc++에서 multithreaded dll 옵션을 사용하면 이런 제한을 피할 수 있습니다.
multithraded dll 옵션이 없다면 같은 상황에서 프로그램은 정상적으로 실행되지 않고 중단될 수 있습니다.
예를 들어 dll이 release mode로 개발되고 해당 dll을 사용하는 main program을 debug mode로 실행한다고 가정하면 main pgrom이 사용하는 debug용 crt dll(메모리 관련 함수가 있는)과 dll이 사용하는 release용 crt dll이 일치하지 않으므로 인해 문제가 발생합니다.
또 다른 예로 dll이 vc++6.0으로 개발되고 main이 vc++7.0으로 개발되었다면 사용 crt버전 역시 일치하지 않는 문제도 발생합니다.
바로 이런 문제와 기타 등등의 이유로 alloc()등을 이용해 특정 메모리를 사용한다면 바로 해당 dll에서 해당 alloc()에 해당하는 free()함수를 호출해야 합니다.
이 문제는 윈도우즈 dll이 아닌 linux so 역시 마찬가지이고 프로젝트 관리 측면에서도 한 dll에서 처리하는 것이 좋습니다.
gcc에서 해당 기능이 있는지는 모르겠습니다만 있다하더라도 사용하지 않는 것이 좋습니다.
귀찮더라도 wrapping 함수를 만들어 사용하거나 메모리 해제를 같은 dll에서 하는 것을 권장합니다.
되도록 같은 dll에서 특정 메모리 alloc()과 free()는 사용하는 것이 좋습니다.
vc++에서 multithreaded dll 옵션을 사용하면 이런 제한을 피할 수 있습니다.
multithraded dll 옵션이 없다면 같은 상황에서 프로그램은 정상적으로 실행되지 않고 중단될 수 있습니다.
예를 들어 dll이 release mode로 개발되고 해당 dll을 사용하는 main program을 debug mode로 실행한다고 가정하면 main pgrom이 사용하는 debug용 crt dll(메모리 관련 함수가 있는)과 dll이 사용하는 release용 crt dll이 일치하지 않으므로 인해 문제가 발생합니다.
또 다른 예로 dll이 vc++6.0으로 개발되고 main이 vc++7.0으로 개발되었다면 사용 crt버전 역시 일치하지 않는 문제도 발생합니다.
바로 이런 문제와 기타 등등의 이유로 alloc()등을 이용해 특정 메모리를 사용한다면 바로 해당 dll에서 해당 alloc()에 해당하는 free()함수를 호출해야 합니다.
이 문제는 윈도우즈 dll이 아닌 linux so 역시 마찬가지이고 프로젝트 관리 측면에서도 한 dll에서 처리하는 것이 좋습니다.
gcc에서 해당 기능이 있는지는 모르겠습니다만 있다하더라도 사용하지 않는 것이 좋습니다.
귀찮더라도 wrapping 함수를 만들어 사용하거나 메모리 해제를 같은 dll에서 하는 것을 권장합니다.
댓글 달기