[퍼온글]VC6 Tip

VC6에서

1. 다른 프로젝트의 header file include하기
makefile에서 -I로 header file 넣는 거랑 같은 일이다.
하다보면 Cannot open include file: 'xxx.h': No such file or directory 이런거 많이 본다.
이때에는 상단메뉴의 Project-> Setting을 누르면 Project Settings 라는 dialog 뜬다.
여기서 왼쪽 화면에서 해당 프로젝트 선택하고 오른쪽화면의 탭중 c/C++ 선택한다.
그리고 바로 밑의 Category에서 Preprocessor를 선택한다.
그러면 아래의 입력창중 Additional include directories:를 볼 수 있다.
여기에 사용하고 싶은 header file 이 있는 directory를 넣어주면 된다.

2. S/W compile 옵션 넣기
S/W에서 사용하는 user defined option 넣기이다.
상단메뉴의 Project-> Setting을 누르면 Project Settings 라는 dialog 뜬다.
여기서 왼쪽 화면에서 해당 프로젝트 선택하고 오른쪽화면의 탭중 c/C++ 선택한다.
그리고 바로 밑의 Category에서 Preprocessor를 선택한다.
여기서 Preprocessor definitions에 원하는 Option을 주면 된다.

3. Library 추가하기
우선 1번의 header file을 알아먹게 해야 할것이다. 그 다음은
상단메뉴의 Project-> Setting을 누르면 Project Settings 라는 dialog 뜬다.
여기서 왼쪽 화면에서 해당 프로젝트 선택하고 오른쪽화면의 탭중 Link 선택한다.
Category 에서 Input을 선택한다.
여기서 Object/library modules에 원하는 lib를 적는다.
그 다음으로는 Additional libray path 에 위에서 입력한 lib가 있는 directory path를 입력한다.

4. MFC library 문제
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in xxx.lib(xxx.obj)
요런거 본적 있을 것이다. 이거는 현재 사용하고 있는 library에서 사용하고 있는 static한 무엇인가가 어디의 libray에 정의되어 있는 static한 무엇와 겹친다는 말이다.

요때에는 상단메뉴의 Project-> Setting을 누르면 Project Settings 라는 dialog 뜬다.
여기서 왼쪽 화면에서 해당 프로젝트 선택하고 오른쪽화면의 탭중 General을 선택한다.
그리고 Microsoft Founcation Classes:를 Use MFC in a Shared DLL로 선택해보자.

5. thread 문제
fatal error C1189: #error :  Please use the /MD switch for _AFXDLL builds <= 하다보면 요런 것도 보인다.
이거이 사용하는 library 중 mulit-thread library 가 있으니..  build option을 mulit-thread로 하라는 의미이다.
요럴때는 상단메뉴의 Project-> Setting을 누르면 Project Settings 라는 dialog 뜬다.
여기서 왼쪽 화면에서 해당 프로젝트 선택하고 오른쪽화면의 탭중 C/C++을 선택한다.
Category에서 Code Generation을 선택한다.
Use run-time library 를 Debug Multithreaded DLL을 선택하자.

by 용팔 | 2006/10/30 09:57 | 트랙백 | 덧글(0)

nafxcwd.lib(afxmem.obj) : error LNK2005

nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)

CRT(C 런타임) 라이브러리와 MFC(Microsoft Foundation Class) 라이브러리가 잘못된 순서로 링크되면 다음과 비슷한 LNK2005 오류가 발생할 수 있습니다.

nafxcwd.lib(afxmem.obj) : 오류 LNK2005:
"void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z)이(가)
LIBCMTD.lib(new.obj)에 이미 정의되어 있습니다.

nafxcwd.lib(afxmem.obj) : 오류 LNK2005:
"void __cdecl operator delete(void *)"(??3@YAXPAX@Z)이(가)
LIBCMTD.lib(dbgnew.obj)에 이미 정의되어 있습니다.

nafxcwd.lib(afxmem.obj) : 오류 LNK2005:
"void * __cdecl operator new(unsigned int,int,char const *,int)"
(??2@YAPAXIHPBDH@Z)이(가) LIBCMTD.lib(dbgnew.obj)에 이미 정의되어 있습니다.

mfcs40d.lib(dllmodul.obj): 오류 LNK2005: _DllMain@12이(가)
MSVCRTD.LIB (dllmain.obj)에 이미 정의되어 있습니다.

mfcs42d.lib(dllmodul.obj): 오류 LNK2005: _DllMain@12이(가)
msvcrtd.lib(dllmain.obj)에 이미 정의되어 있습니다.



원인
CRT 라이브러리는 new, delete 및 DllMain 함수에 대해 약한 외부 링크를 사용합니다. MFC 라이브러리에도 new, delete 및 DllMain 함수가 포함되어 있어 CRT 라이브러리 전에 MFC를 링크해야 합니다.


해결 방법
이 문제를 해결할 수 있는 방법에는 두 가지가 있습니다. 첫 번째 해결 방법은 링커가 올바른 순서로 라이브러리를 강제 링크하도록 하는 것입니다. 두 번째 해결 방법은 문제를 일으키는 모듈을 찾아 해결하는 것입니다.
해결 방법 1: 링커가 올바른 순서로 라이브러리를 강제 링크하는 방법
1. Project 메뉴에서 Settings을 눌러 Project Settings 대화 상자를 엽니다.
2. Settings For 뷰에서 링크 오류가 발생하는 프로젝트 구성을 선택(강조 표시)합니다.
3. Link 탭을 누릅니다.
4. Category 콤보 상자에서 INPUT을 선택합니다.
5. Ignore Libraries 입력란에 라이브러리 이름(예: Nafxcwd.lib Libcmtd.lib)을 입력합니다.
   참고: 링커 명령줄은 /NOD:과 동일합니다.
6. Object/library Modules 입력란에 라이브러리 이름을 입력합니다. 이 이름은 반드시 해당 행의 처음 두 라이브러리(예: Nafxcwd.lib Libcmtd.lib)와 같은 순서대로 나열되어야 합니다.
Visual C++ .NET에서 이 옵션을 설정하려면 온라인 도움말의 Visual C++ 프로젝트 속성 설정 항목을 참조하십시오.
해결 방법 2: 문제 모듈을 찾아 해결하는 방법
다음 단계를 수행하여 현재 라이브러리 링크 순서를 확인합니다.
1. Project 메뉴에서 Settings을 눌러 Project Settings 대화 상자를 엽니다.
2. Settings For 뷰에서 링크 오류가 발생하는 프로젝트 구성을 선택(강조 표시)합니다.
3. Link 탭을 누릅니다.
4. Project Options 대화 상자에 다음을 입력합니다.
   /verbose:lib
5. 프로젝트를 다시 빌드합니다. 링크하는 과정에서 출력 창에 라이브러리가 표시됩니다.


현재 상태
이것은 의도적으로 설계된 동작입니다.


추가 정보
MFC 라이브러리를 사용할 때는 MFC 라이브러리가 CRT 라이브러리 전에 링크되도록 해야 합니다. 이렇게 하려면 프로젝트에 있는 모든 파일이 직접(#include ) 또는 간접(#include )적으로 먼저 MsdevMfcIncludeAfx.h를 포함하도록 합니다. Afx.h 포함 파일은 #pragma 주석(lib,"") 지시어를 사용하여 라이브러리의 순서를 올바르게 조정합니다.

원본 파일 확장명이 .c이거나 파일 확장명이 .cpp이지만 MFC를 사용하지 않는 경우 모듈 맨 위에 작은 헤더 파일(Forcelib.h)을 만들어 포함시킬 수 있습니다. 이 새로운 헤더가 라이브러리 검색 순서를 올바르게 합니다.

Visual C++에는 이 헤더 파일이 들어 있지 않지만 다음 단계를 수행하여 이 파일을 쉽게 만들 수 있습니다.
MsdevMfcIncludeAfx.h를 엽니다.
#ifndef _AFX_NOFORCE_LIBS와 #endif //!_AFX_NOFORCE_LIBS 사이의 행을 선택합니다.
선택 영역을 Windows 클립보드로 복사합니다.
새 텍스트 파일을 만듭니다.
클립보드 내용을 새 파일에 붙여넣습니다.
파일을 MsdevMfcIncludeForcelib.h로 저장합니다.


http://alones.byus.net/tt 에서 가져왔습니다. 고맙습니다.
다른 사이트 있는 포스트를 트랙백해올수는 없나??

by 용팔 | 2006/10/27 10:12 | 트랙백 | 덧글(1)

모든파일이름 얻어오기

#include <stdio.h>
#include <io.h>

void main()
{
  long                     hFile;
  struct _finddata_t       stFileInfo;

  hFile = _findfirst("C:*.*", &stFileInfo);
  //해당파일이 없으면..
  if (-1L == hFile)
  {
      return;
  }

  do {

      //검색한 파일명출력
      printf("%sn", stFileInfo.name);
  //다음파일찾기
  } while (0 == _findnext(hFile, &stFileInfo));
}

by 용팔 | 2006/03/20 17:51 | ▣ 컴터야그 ▣ | 트랙백 | 덧글(0)

Professional 소프트웨어 개발





1월 27일에 영화 보러갔다가 잠시 들렸던 서점에서 이 책을 구입했다.
평소에 스티브 맥코넬이 쓴 책들을 선호했고, 책도 그다지 두껍지 않아서, 샀는데..
인터넷 등의 평가를 보니 요즘에 상당히 뜨는 책인가 보다.
회사를 옮기려고 했다가, 결국 정에 이끌려 이 회사에 계속 다니기로 했다.
그러나, 여전히 박봉과 심한 야근은 너무 힘들다. 둘중 하나라도 해결되면 좀 위로가 될텐데...
이러한 계기는 이러한 악순환을 끊고, 효과적으로 짧은 시간 일하고, 더 좋은 결과물을 낼 수 있는
방법이 있지 않을까? 어떠한 것이 있을까? 라는 생각을 계속 들게 하였다.
"Profession 소프트웨어 개발" 을 보고서 내가 한 판단은 지금의 회사는 이 책의 표현에 따르면,
프톨레마이오스식 논리처럼 내용이 형식주위를 맴돌고 있다는 것이었다.
시스템설계,코딩,테스팅,QC등이 있지만 정확히 단계를 밟아가지 보다는 급한 일정 때문에,
모든것이 제대로 실행되지 못하는 것이다.
충분한 설계 시간도 없고, 제대로 검토되지 않은 설계로 코딩하며, 코딩 후 또 충분한 검토의 시간을 갖지 못한채로,
테스트에 들어가고, 다시 디버깅하고 정말 악순환이다.
이러한 상황에서, 이 책은 결국 조직의 프로세스와 개인의 능력이 어떠해야 하는지에 대해서 얘기하고 있다.
개발자로서 내가 앞으로 나아갈 방향과 과연 이 조직에 변화를 주고 싶을 때, 그 변화의 방향이 정확히 어디인지
설명하고 있다. 이 부분에 대해서 계속 해서 공부해 나가고 언젠가 결과를 얻게 되는 날이 오기를 강력히 희망한다.



by 용팔 | 2006/02/19 00:10 | ▣ 읽은책들 ▣ | 트랙백(2) | 덧글(0)

<< 이전 페이지다음 페이지 >>