UNIX, LINUX 프로그램의 Windows 환경으로의 포팅에 관한 질문
글쓴이: arrest05 / 작성시간: 화, 2013/01/22 - 1:21오후
안녕하세요
제가 질문드릴것은 UNIX, Linux에서 작성된 어플리케이션을 Windows 환경에서 돌아갈 수 있도록 포팅하는 것에 대
한 질문입니다.
제가 알고 있기로는 UNIX, Linux는 gcc 컴파일러와 POSIX API를 사용하기 때문에 별다른 코드의 수정 없이
동작이 되는걸로 알고있습니다. 문제는 Windows의 경우인데요.. 많은 분들이 UNIX, Linux 어플리케이션을 Windows
로 변경할 때, 많은 애로사항이 있다는 걸 들어서... 일단 겁이납니다.
제가 궁금한것은 UNIX, Linux, Windows(환경에서의 Visual Studio) 에서 사용하는 c Compiler가 UNIX, Linux의 경
우 gcc 이며 Windows의 경우 Visual Studio로 알고있는데.. 이 두가지 Compiler에서 제공하는 C LIB의 경우 함수
이름과 리턴값 에러값 등등이.. 모두 똑같은지 궁금합니다. 만약 이런 Compiler에서 제공하는 C LIB가 같다면
POSIX API 부분에 대해서만 포팅해주면 될거 같아서... 질문드려봅니다..
Forums:
저도 들은 풍월만큼만 앏니다만, 컴파일러 확장문법이
저도 들은 풍월만큼만 앏니다만, 컴파일러 확장문법이 사용된 코드인지 확인해볼 필요가 있습니다.
http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
원래소스가 gcc 로 컴파일하던 것인지는 모르겠으나 그렇다면 gcc 에서 표준을 지정하는 옵션이 있습니다. 그런 옵션으로 표준 c 로 컴파일해 보면 확인이 될 것 같습니다.
그런데 제가 질문과 조금 다른 답변을 드린 것 같네요.. 표준 C 라이브러리라면 호환성이 보장되는가... 호환될 것 같긴한데 저도 경험해보진 못했습니다. 정확한 지식도 없구요... 글 삭제가 안되서 이렇게 부족한 답변을 그대로 둘 수 밖에 없네요..
Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.
답변 감사드립니다 ^^
답변 감사드립니다 ^^
오승택
문법이든 라이브러리이든 C표준에 정의된 것들은 당연히
문법이든 라이브러리이든 C표준에 정의된 것들은 당연히 완전히 같습니다. (같아야 합니다.)
제 경험상 표준 라이브러리에서 문제가 생긴 것을 본 적은 없습니다.
물론 정확히 사용했을 경우에 그렇습니다.
표준에 정의되지 않은 우연한 동작에 의존하고 있는 버그들이 있을 수도 있으니 그런 코드는 고쳐주어야 합니다.
oosap님 말씀대로 확장 기능들은 따로 확인을 해야합니다.
확장 기능들 중 일부는 C99 표준에 포함되어 있으므로 VC로 컴파일할 때에 C99옵션을 주시는 쪽이 좋습니다.
POSIX API를 사용한 것들은 호환이 안될 가능성이 큽니다.
예를 들어 fork, exec 계열 함수들은 당연히 Windows에는 없습니다.
Unix 계열과 Windows가 다른 프로세스 모델을 사용하니까요.
이런 OS의존적인 기능들은 해당 플랫폼에 맞도록 고쳐주어야 합니다.
답변 갑사드립니다 ^^
답변 갑사드립니다 ^^
오승택
제경험에는 미묘하게 다르더군요. 함수이름이 대부분
제경험에는 미묘하게 다르더군요. 함수이름이 대부분 _open 이런식이구요, 파라메터도 순서가 바뀌는 경우도 있구요
반환값이 32bit나 64bit로 다른경우도 있었습니다.
그래서 이런부분을 추상화 해주는 별도의 레이어를 제작하여 사용했었구요.
바퀴를 재발명 할 생각이 없다면, portable한 라이브러리를 찾아보시는것을 권장합니다.
C LIB 부분은 그냥 윈도에서도 gcc를 쓰면 되지
C LIB 부분은 그냥 윈도에서도 gcc를 쓰면 되지 않을까요?
운영체제에서 제공하는 함수들이야 당연히 다르겠습니다만..
댓글 달기