Visual C++6.0으로 64비트 프로그램만들기.(EM64T, AMD64)
글쓴이: bizzare / 작성시간: 화, 2005/04/12 - 10:41오전
Visual C++ 6.0 을 사용하고 있습니다.
이를 이용하여 EM64T 혹은 AMD64 cpu가 탑재된 컴퓨터에서 돌아갈 64비트 프로그램을 제작하고 싶은데요.
platform sdk 를 설치한 후에 만들 수 있는 64비트 프로그램은 IA64용뿐인 것 같더군요.
현재 Visual C++ 6.0으로는 EM64T혹은 AMD64 cpu가 탑재된 컴퓨터용 64비트 프로그램을 만들 수 없는건가요?
답변 부탁드립니다.
:D
Forums:
불가능합니다.
불가능한 이유는. VC++6.0이 32비트 어플만 만든다는겁니다.
설명을 하자면 복잡한데.
우선 우리가 코딩을 할때 각 프로그램의 명령어를 사용하여 코딩을하게됩니다.
그리고 컴파일이라는것을 하는데 여기서 컴퓨터가 이해할수 있는 기계어로 바뀌게 되죠(중간에 목저코드란 단계를 거치지만 최종은 기계어가 됩니다)
제가 저급언어(기계어, 어셈플리어) 전공이 아니라서 (학교에서 요즘뜨는 .NET을 그것도 VB.NET 위주로 배웠거든요) 기계어가 어떻게 생겻는지 모르겠지만. 32비트라함은 길이가 32비트입니다.
즉
00000000000000000000000000000000~99999999999999999999999999999999사이의 이진수(2의 32승)로 구성된 명령어를 사용한는게 32비트죠
그럼 64비트는 뻔하죠 2의 64승입니다. 그만큼 명령어길이가 더긴데 VC++6.0이 32비트용이고 32비트로만 컴파일되게 제작된 언어라 이것으로 아무리 용쓰고 만들어도 32비트 프로그램밖에 못만듭니다. 그럼 64비트 프로그램은 못만들까요? 6.0으론 안되지만 그 상의 버전이면 4가지 방식으로 가능합니다.
첫째로 닷넷을 쓰는거죠 여기서 두가지로 갈리는데 하나는 VC#(C#)을 이용하는것인데. C++ + Java격의 언어입니다. 컴파일러도 닷넷 프레임워크 깔면 자동으로 깔리게 됩니다.(MS사이트에서 다운받을 수도 있고요=>무료임) C++의 상의 언어이지만 포인터를 마음대로 쓰지못합니다. 안전하다고 선언해주고 옵션에서도 설정해야 포인터를 쓸수있습니다.(포인터대신 레퍼렌스(참조)형이란 타입으로 포인터를 대신합니다.)
그리고 역시 닷넷의 VC++ 7이상 버전에선 메니지먼트 C++ 이란게 있는데. 그게 VC++ 7 이상에서 닷넷 프로그램을 만들 수 잇는 모드입니다. 말그대로 C++ 코드로 닷넷프로그램을 만드는데, 코드는 C++이고 형테는 C# 또는 Java와 같은 형테를 갖고있습니다.(조금만 만져보면 쉽다는느낌을 가질수있습니다. C#보다는 조금 어려움) 그리고 닷넷의 특징은 닷넷프레임워크가 깔려있는 윈도라는 전제하에 한번 컴파일한 프로그램은 제 컴파일(포팅이랄까) 없이 32비트 윈도면 32비트로, 64비트 윈도면 64비트로 사용할 수 있습니다.(닷넷내부의 CLR이 코드를 최적화합니다. 이는 자바의 바이트코드같은 MSIL이란 중간언어로 컴파일 되기 때문이죠, 실행시 CLR이 최종기계어로 재컴파일(인터프리트)하기 때문에 32비트에선 32비트로 64비트에선 64비트로 동작합니다.)
그리고 64비트용(64비트 기계어 코드를 만들어내는)컴파일러를 가진 C++을 이용하는것이 있는데 이는 CPU(EM64T/AMD64(x64) 및, IA64)에 따라 컴파일러가 달라지고 EM64T/AMD64랑 IA64랑 서로 호환되지 않기 때문에 x64용 컴파일러에서 만든 프로그램은 x64에서만 IA64용 컴파일러에서 만든 프로그램은 IA64에서만 돌릴 수 있습니다.
마지막으로 게중에 이런게있는데 첫 실행시 32비트로 실행한후 32비트냐 64비트냐를 내부적으로 따져서(?) 32비트면 32비트로 동작하고 64비트면 64비트로 동작하는 옵션이 64비트용 C++ 컴파일러에 있습니다.
추가내용
닷넷 프레임워크는 1.1까지는 32비트용만 있으며, 2.0 부터 x86(32비트), x64(EM64T/AMD64), IA64(Itanium)용으로 구분되어 있습니다.
태클은 아니고요;;;
"00000000000000000000000000000000~99999999999999999999999999999999사이의 이진수(2의 32승)로"
가 아니고
00000000000000000000000000000000~11111111111111111111111111111111사이의 이진수(2의 32승)로
가 맞지 않을까요? ^^;
====================================
BornAgain !!
Email: jskim98@gmail.com
====================================
====================================
BornAgain !!
Email: jskim98@gmail.com
====================================
태클로 받겠씁니다.
지적 감사합니다. 00000000000000000000000000000000~99999999999999999999999999999999
가 아니고 00000000000000000000000000000000~11111111111111111111111111111111가 맞습니다. 2진법이니 0과 1로만 표시하니까..
00000000000000000000000000000000~99999999999999999999999999999999
라면 사람이 쓰는 10진법이죠.
cl.exe
Hello World.
cl.exe는..
Cl.exe를 언급한 이유는 뭔지요?
.
VisualStudio 6.0에서 쓰는 컴파일러 버젼이 위와 같습니다. 32bit라고 적혀 있네요.
만약 32bit, 64bit 둘 다 컴파일이 가능하다면 32bit/64bit-compatible 와 같이 적혀있었겠군요.
더불어서 윈도우도
더불어서 윈도우도 64비트인지?
xp나 vista 64bit edition이어야 64비트 윈도우 어플 돌릴 수 있습니다.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
덧붙여서 VC++ 6.0
VC 6.0 은 완벽하게 POSIX 지원하지 않습니다. 제가 예전에 어떤 함수하나때문에 무지하게 애먹었죠.
MSDN 스펙은 맞는데 결과가 이상하게 나오더군요.
자세히보니까.
VC 8.0이상부터라고 써있더군요. ㅡㅡ;
결국 VC 2005 부터 진정한 POSIX이란..ㅠㅠ
VC 6.0 은 openMP도 지원안됩니다. ㅡㅡ;
Hello World.
금시초문..
그걸지원한다는건 금시초문이네요..
제가 쓴 글중에. 정정해야 할 부분이 있네요.
어제 VC++.NET 2005의 CLR모드로 간단 한 프로그램을 만들고 64비트 XP에서 돌리고 프로세스를 확인해보니
dotNet2.exe *32 (☜ 프로그램이름을 dotNet2라고 했음) 이렇게 나오네요. 이는 32비트로 동작하는 것인데..
확인해본결과
C#,VB.NET은 32비트면 32비트로 64비트면 64비트로 동작(VS2005이상으로 제작했다는 전제하에)하나 VC++.NET은 2005이상의 버전이라도 제작한 OS의 비트로 동작하는거 같네요.
그리고 참고적으로 VC++.NET으로 닷넷 프로그램을 만들때 배포 목적이라면 최종 컴파일시 릴리즈로 해놓고 배포해야 합니다. 1.1(VS.NET 2003/VC++.NET 7)까지는 디버그 모드로 컴파일한것도 닷넷 프레임워크만 깔려있다면 어디서나 잘 동작하였으나 VC++.NET 8(2005) 부터는 디버그모드로 컴파일한것이 오류를 내며 동작하지 않네요.
질문글이면 제목을 질문글처럼..
팁인줄 알고 세상에나! 하고 들어왔는데 질문글이었네요 ㅡ,.ㅡ.....
댓글 달기