이글루스 | 로그인
메뉴릿
카테고리
전체
공지사항
계획
Languages
Humanities
Mathematics
Education
Economics
Computers
HCI
Media
Engineering
Natural Science
TmaxSoft
BluemoonSoft
미분류
최근 등록된 덧글
짝짝짝 올 많이 컸네 일구
by izeye at 11/12
제가 갖고 있는 소스 파일..
by 언제나19 at 10/17
우왕 고맙습니다~~. ..
by 언제나19 at 10/16
http://nethack.byus..
by uriel at 10/16
근본적으로 activation ..
by uriel at 10/16
다운 안되는데여;;;;;
by 강병진 at 10/14
일단, 형변환 자체가 ..
by uriel at 04/11
어제는 괜히 xfix 실행..
by 언제나19 at 01/18
좀 기다리세요. 내년 4..
by 언제나19 at 11/04
바꾸어라.. 언제나19-..
by kang at 11/03
최근 등록된 트랙백
textcube를 다시 설치
by 공부가 본업.
gnuplot을 c 함수로 ..
by 상품 + 글 의견 남기기
gsl, gnu scientific li..
by 상품 + 글 의견 남기기
ubuntu, ati에서 dual..
by 상품 + 글 의견 남기기
Data browser로 sql d..
by 공부가 본업.
근황
by Yi jeon goo
근황
by Yi jeon goo
라이프로그
화려한 휴가
화려한 휴가

좋지 아니한가
좋지 아니한가

300
300

포토로그

언제나19의 포토로그
메모장 실험
메모장도 로그가 남나 실험
이전블로그
more...
이글루링크
◈ ◈ ◈ 바다가 머무는 ..
Mono log
Liard's newspaper
Yochin의 대전생활.
M log
art.oriented
* Sea of Blue *
이글루 파인더
rss

skin by 狂風
Visual Studio 2005가 없는 machine에서 DLL을 못 읽는 문제


DLL을 배포할 일이 생겼다.
blabla.dll을 simulator.exe와 함께 배포하면, simulator.exe가 blabla.dll을 LoadLibrary해서 실행되는 구조였다.

그 동안 몇 번 엄청 고생했었다.
다른 machine에서 실행이 안돼서.
온갖 삽질을 하다가, visual studio service pack1 등 windows update를 하면, 문제가 해결된다는 것을 발견했다.
그러려니 하고, 매번 target machine에 windows update를 해가며 배포하고 있었다.

근데, 이제 진짜 release할 일이 생겼다.
그 동안에는 다른 개발자에게 전해주는 용도여서 괜찮았는데,
visual studio를 안가진 사용자에게 주려고 하니,
이거 어떻게 해야 하나

release mode로 build하면 될 줄만 알았다.
하지만, release mode라고 되는 건 아닌가보다.
- 사실 release mode인지 아닌지도 정확히 모르겠다. project 속성에서 predefine에 NDEBUG 넣고, 코드 생성을 다중스레드DLL로 하는 등 몇 개 속성을 바꿔봤는데, 이런 걸로 진정한 release mode build가 되는 건지도 모르겠다. -

어쨋든, target machine에서 simulatro.exe를 실행하면, LoadLibrary에서 실패한다.

삽질만 하다가 인터넷에서 단서를 찾았다.
http://social.msdn.microsoft.com/forums/en-US/windowsdirectshowdevelopment/thread/9919242b-c40d-4504-ab91-005f7f079902/
Microsoft Visual C++ 2005 SP1 Redistributable Package (x86): http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en
그런데, 시키는대로 redistributable package exe파일을 d.dll, simualtro.exe파일 있는 target machine 위치에서 실행해봐도 안돼--
좋다 말았네.

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=260355
도 무슨 소린지 모르겠고,

http://somma.egloos.com/3020481
에 자세하게 나온 것 같은데, 잘 모르겠다. 따라해보고 이해할 수 있을런지 모르겠네.




이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 언제나19 | 2009/10/16 23:29 | Computers | 트랙백 | 덧글(3)
트랙백 주소 : http://always19.egloos.com/tb/2458039
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by uriel at 2009/10/16 23:42
근본적으로 activation context의 문제.

visual studio에는 msvcr80.dll 등 mfc 80 계열 dll을 배포하는데, 이게 그냥 같은 위치에 해당 파일을 둔다고 적용되는 녀석이 아니라서 문제지.

위의 링크 중 http://somma.egloos.com/3020481 의 내용이 맞는 말인데, 해결책 1, 2, 3이라고 나온 게 사실 마음에 안드는 편.. 내 경우는 이 경우에
1. 인스톨러를 만들어서 mfc 80 계열을 같이 배포시킨다
2. blabla.dll을 컴파일 할 때에, mfc를 static하게 링크시켜서 만든다

중 하나를 추천. 2번이 사실 더 편한데, 근본적으로 안되는 경우가 가끔씩 있지.

Commented by 언제나19 at 2009/10/16 23:48
우왕 고맙습니다~~. 해볼께요. 아까까진 암울했는데, 이제 희망적이에요. 히히.
즐거운 주말 보내세요!
Commented by uriel at 2009/10/16 23:44
http://nethack.byus.net/zboard/zboard.php?id=board&page=9&sn1=&divpage=2&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=8050 의 답글에 내가 써 준 것을 참조..

dll을 만들 때에 c/c++ -> 코드 생성 -> 런타임 라이브러리에서 "다중스레드 DLL" 대신에 "다중 스레드"로 선택해서 외부 mfc 80 계열이 필요 없게 해 보길..

:         :

:

비공개 덧글


◀ 이전 페이지 다음 페이지 ▶