비주얼스튜디오에서 콘솔로 c++기본 라이브러리만 썼는데 msvcr80.dll 링크되네..그래서 mingw로 컴파일해보니까 msvcrt.dll 이 링크되고,,이거 뭥미?어떻게 해야지 플랫폼에 독립적인 코드를 만들수 있는겅미?
운영체제에 붙는 코드를 쓰니까 그렇져
그런거 안썼고 기본적인 것들만 썼다니깐 입출력에 cout,cin, 파일함수로는 fopen,...
표준 입출력도 운영체제 통해야겠죠? :D
kernel32.dll 에 링크되는건 어떻게할겅미?
perl이나 python같은걸로 만들면 됨
리눅스용 c컴파일러 쓰면 리눅스용 프로그램이 만들어지려나
적분횽 심각한 질문이3?? msvcrt 는 microsoft visual c (++) runtime 을 말하는거3 리눅스에서 똑같은거 하고 ldd 쳐보3
컴파일 하는순간 이미 \'독립성\'은 물건너 가는거임 -ㅅ - 소스코드 자체를 독립적으로 유지할수는 있어도 컴파일하면 해당 OS에 맞는 바이너리로 바뀌니 독립성은 없는거지
그래서 자바가 중간계층을 둬서 플랫폼에 종속적이지 않는거고.. (대신 그걸 해석해줄 JVM을 플랫폼마다 깔아야한다능)
괜히 Java가 Platform Independent 하다고 그렇게~ 광고를 때려댄 게 아니지...
아 귀찮네
write once, debug everywhere
형아가 가르쳐줄께. \'기본적인 것\'이라고 말한 count, cin 등이 비록 운영체제와 컴파일러에 상관없이 모두 동일한 인터페이스를 가지고 있지. 즉, 함수 인자 형태나 리턴 값의 의미는 똑같애.
그런데 이런 기본적인 함수들을 구현을 하는 건 각 플랫폼마다 컴파일러마다 다르다는거야. 윈도우에서 cout을 구현하려면 결국 윈도우 system API를 불러야하고 마찬가지로 리눅스도 그래야겠지?
리눅스에서 컴파일을 하면 libc.so 혹은 libc++.so 같은 런타임라이브러리가 필요해. 기본적인 printf, cin등이 구현되어있는 라이브러리지.
즉, 요약하면 최상위에서는 플랫폼 독립적인 API만 쓰더라도 결국 이 구현은 플랫폼 종속적이기 때문에 운영체제, 컴파일러마다 다르다 이거야.
한마디로 자바 코드가 JVM위에서는 똑같이 돌아가지만 그 JVM은 윈도우/리눅스 버전을 만들어야하는 것과 같은 이치야.
=_=;;;;;;;;;;;;
그런거 아니고;;; 런타임 라이브러리를 dll로 빼놔서 그런거야. 프로젝트 설정 들어가서 정적 라이브러리 쓰도록 하면 그 dll 없어도 돼.
런타임 라이브러리는 많은 프로그램들이 공유하는데 각각 가지고 있을 필요가 없으니까 용량도 줄이고 시스템 메모리도 아낄 겸 해서 dll로 빼놓은거지.
=_=;;;;;;;;;;;; msvcrt.dll에 printf같은 기본적인 함수 구현되어 있는거 맞는데.... printf야 뭐 fprintf(stdout, ...)으로 하면 되니 printf는 매크로고 fprintf의 구현은 바이너리로 라이브러리되어 있는거지... ㅋ