OS 가 없는 환경에서 C/C++ standard library 를 사용할 수 없는건가요...?

scan15g의 이미지

안녕하세요.

저는 프로그램에 대하여 아주 초보자 입니다. 이곳에 계신분들의 도움을 얻고자 질문을 드립니다.

전혀 컴파일, 링킹 등의 개념을 모르다가 며칠동안 맨땅에 헤딩하면서 알아낸 사실이 있습니다.

OS가 없는 환경에서는 C/C++ standard library를 사용할 수 없다는 것 입니다.
예를들어 크로스 컴파일러로 간단한 C 코드를 컴파일 및 링킹을 해 보았습니다.
'new'를 call 했더니, 'malloc'을 찾더니 결국에는 시스템 콜을 부르려다가 찾을 수 없다면서 컴파일 링커가 죽더군요...

하지만,
OS가 없는 환경에서 newlib같은 라이브러리가 사용될 수 있다고 이야기를 들었는데요.
이 의미가 어떤 것인 지 궁금합니다...

OS가 없으면 무슨 수를 써도 정말 malloc같은 C standard library는 전혀 사용할 수 없는 것인지요?

그렇다면 newlib같은 라이브러리는 무슨 의미가 있는 걸까요...?
아니면 사용할 수 있다면 어떤 식으로 사용될 수 있는 것인지.. 감이 잡히지 않습니다 ㅠㅜ

부디, 한수 가르침을 부탁드립니다.

감사합니다!

moldycake의 이미지

OS가 없으면 C 문법이라는게 의미가 없지 않나요?
---------------------------------
정확한 답변은 다음분께서..

kukyakya의 이미지

gcc의 경우 C/C++ 표준 라이브러리가 제공되는 hosted mode와 standalone mode를 지원합니다.

standalone mode를 사용할 경우 posix 함수들을 구현한 구현체를 직접 링크해주셔야하는데, OS가 존재할 경우 해당 OS의 system call을 이용한 구현체(glibc같은)를 사용하시면 되겠지만 OS가 없을 경우에는 해당 함수들을 직접 구현하셔야 합니다. 이럴 경우 기반이 되는 몇가지의 함수들만 제공하면 다른 함수들을 사용할 수 있도록 구현한 것이 newlib이라고 알고 있습니다.

newlib document에서 어떠한 함수를 직접 구현해야하는지 찾아보시면 될 것 같습니다.

p.s. OS가 없는 환경이라면 아마도 MCU 쪽이 아닐까 싶은데, C는 그렇다쳐도 C++은 표준 라이브러리가 gcc의 일부라 빌드하기가 쉽지가 않았습니다. 일단은 posix부터 해결보시는 걸 추천드립니다.

qkrwncks593의 이미지

실제 함수를 호출할때는 인터럽스를 발생시켜 시스템콜을 합니다.

시스템콜은 OS 가 있어야 가능합니다. 여기까지 바껭 ..

february28의 이미지

질문분의 반응없음이 괜한 오해를만든것같은 느낌에 노파심에 지웁니다.

--------------------------------------------------------------------------------
open source, open teaching, 천기누설이 꿈~ 은 개뿔...
--------------------------------------------------------------------------------

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.