UNIX, LINUX 프로그램의 Windows 환경으로의 포팅에 관한 질문

arrest05의 이미지

안녕하세요

제가 질문드릴것은 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 부분에 대해서만 포팅해주면 될거 같아서... 질문드려봅니다..

oosap의 이미지

저도 들은 풍월만큼만 앏니다만, 컴파일러 확장문법이 사용된 코드인지 확인해볼 필요가 있습니다.

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.

arrest05의 이미지

답변 감사드립니다 ^^

오승택

익명 사용자의 이미지

문법이든 라이브러리이든 C표준에 정의된 것들은 당연히 완전히 같습니다. (같아야 합니다.)
제 경험상 표준 라이브러리에서 문제가 생긴 것을 본 적은 없습니다.
물론 정확히 사용했을 경우에 그렇습니다.
표준에 정의되지 않은 우연한 동작에 의존하고 있는 버그들이 있을 수도 있으니 그런 코드는 고쳐주어야 합니다.

oosap님 말씀대로 확장 기능들은 따로 확인을 해야합니다.
확장 기능들 중 일부는 C99 표준에 포함되어 있으므로 VC로 컴파일할 때에 C99옵션을 주시는 쪽이 좋습니다.

POSIX API를 사용한 것들은 호환이 안될 가능성이 큽니다.
예를 들어 fork, exec 계열 함수들은 당연히 Windows에는 없습니다.
Unix 계열과 Windows가 다른 프로세스 모델을 사용하니까요.
이런 OS의존적인 기능들은 해당 플랫폼에 맞도록 고쳐주어야 합니다.

arrest05의 이미지

답변 갑사드립니다 ^^

오승택

comafast의 이미지

제경험에는 미묘하게 다르더군요. 함수이름이 대부분 _open 이런식이구요, 파라메터도 순서가 바뀌는 경우도 있구요
반환값이 32bit나 64bit로 다른경우도 있었습니다.
그래서 이런부분을 추상화 해주는 별도의 레이어를 제작하여 사용했었구요.

바퀴를 재발명 할 생각이 없다면, portable한 라이브러리를 찾아보시는것을 권장합니다.

Hamyt88의 이미지

C LIB 부분은 그냥 윈도에서도 gcc를 쓰면 되지 않을까요?
운영체제에서 제공하는 함수들이야 당연히 다르겠습니다만..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.