나는개발자다2012/02/03 11:50
디버깅을 하는데 갑자기 뜨는 에러..
There is no source code available for the current location

프로그램 동작에는 큰 이상이 없지만
디버깅을 하면서 해당 소스 코드 안에 들어갈 수 없는 문제점이 발생하였다.

구글링을 하면서 찾은 것은..
solution property에서 해당 소스 파일에 들어갈 수 없도록 설정되어져 있었다.

solution->property에서
common properties-> debug source files 에 가 보면
do not look for these source files 에 해당 소스 파일이 추가되어져 있을 것이다.
추가된 파일을 지운다면 소스 파일에 접근할 수 있을 것이다.

하지만 또 문제가 발생했다.
디버깅 중에 소스 파일에 접근하려 하니..
"the source file is different from when the module was built"
에러가 발생한 것이다.
소스 코드에 들어갈 수는 있지만, 찜찜함이 있어서 검색해 보았다.

그 원인은 해당 소스 코드의 인코딩 문제였다.
해당 소스 코드만 인코딩이 다르게 되어져있던 것이었다.
다른 소스 코드는 unicode로 된 반면, 접근할 수 없는 소스 코드에서만 당당하게 korean으로 되어 있던 것이다.

File->Advanced Save Options에 가면 해당 소스 파일의 인코딩을 변경시킬 수 있다.

소스 코드의 인코딩이 변경된 원인은 잘 모르겠다..
아마 이 코드를 보내준 쪽에서 실수했거나, 메일 전송 도중에 변경됐거나..
여튼.. 해당 에러들에 대해서는 이렇게 처리하면 된다.

참조 사이트 :
http://devdev.tistory.com/440 
http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/8576e147-e5d0-4776-b1d9-ad08e85b523f/
저작자 표시 비영리 동일 조건 변경 허락
Posted by jjangmin
나는개발자다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
나는개발자다2012/01/25 13:54
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