달력

01

« 2012/01 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
2012/01/27 12:01

[Visual Studio] Warning MSB4011 나는개발자다2012/01/27 12:01

Warning MSB4011
C:\myproject\myproject.vcxproj(78,5): warning MSB4011: "C:\Users\user\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props" cannot be imported again. It was already imported at " C:\myproject\myproject.vcxproj  (75,5)". This is most likely a build authoring error. This subsequent import will be ignored.  

위와 같은 오류는 PropertySheet가 2번 중복 참조되었을 때 나타나는  warning이다.
이 문제를 해결하기 위해서는 해당 프로젝트 파일(위에서는 myproject.vcxproj)에서  warning이 발생한 부분(위에서는 78번째 줄)에 가서 중복된 PropertySheet의 정보를 지워 주면 된다.

myproject.vcxproj

<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> 
 
위의 코드는 myproject.vcxproj의 부분이고, 진하게 표시된 부분이  warning이 발생한 78번째 줄이다.
확인해 보면 위와 똑같은 코드가 중복됨을 확인할 수 있고, warning가 난 ImportGroup을 지워주면(붉은색 코드 부분) warning이 해결 된다.

왜 이런 warning이 발생했을까 생각해 본다면,
Visaul Studio 2005에서 개발한 프로젝트를 2010으로 컨버팅 하면서 생긴 문제인것 같다.

그리고 이것은  error가 아닌 warning이라서 고치지 않아도 큰 문제는 없는데,
요청하시는 분이 한치의 warning도 용납하지 않으셔서.. 덕분에 해결 방법을 알고 간다.
저작자 표시 비영리 동일 조건 변경 허락
Posted by jjangmin

댓글을 달아 주세요

1. 라이블러리들의 순서의 문제

http://kldp.org/node/449 
위의 사이트를 참고해 본다면.. 일단 라이블러리별 우선순위 문제때문에 에러가 발생한다.
각 라이블러리간 상호 참조 관계를 잘 생각해서 우선순위를 정해서 컴파일 시켜야 함.

2. link되는 파일과 link 되는 디렉토리를 잘 지정해 줘야 함.

프로젝트 빌드옵션에서 linker setting에서 1번의 우선순위를 지켜 라이블러리를 링크 하고
search directories-> linker에서 debug, release별로 생성되는 라이블러리 위치가 다르므로
각각 다른 위치를 지정해 줘야 한다.

*(대박 주의점)*
code blocks에서 library의 우선순위는
아래에 있는게 먼저입니다!!


위의 그림을 보면, library01이 제일 우선순위가 높은 라이블러리 파일이 되는 것이구요..
library02, library03 순으로 우선순위가 낮아진답니다. ㅠㅠ

아.. 정말.. 뭘 모르면 고생이네요 ㅠㅠ
덕분에 평생 잊지는 못할듯 합니다.

(위의 정보를 몰라서 이틀을 고생했어요 ㅠㅠ)


결론 :  리눅스에서의 개발은 윈도우보다(vs보다)신경써야 할 것이 많다. ㅠ 
저작자 표시 비영리 동일 조건 변경 허락
Posted by jjangmin

댓글을 달아 주세요

2011/11/04 11:07

_T() 매크로의 정체는? 나는개발자다2011/11/04 11:07

윈도우 프로그래밍에서 문자열에 쓰이는 매크로 _T()는
프로젝트의 속성에 따라 문자열을 알맞게 변환해 준다.

만약 유니코드 설정이면 _T("string")은 L"string" (유니코드형식)으로 변환되고
멀티바이트 설정이면 "string"으로 변환 된다.

- 이상 _T() 매크로 정의 끗 - 
저작자 표시 비영리 동일 조건 변경 허락
Posted by jjangmin

댓글을 달아 주세요