컴파일시 발생한 에러

ohjungtaek의 이미지

갑자기 리눅스 커널 소스가 보고 싶다는 생각이 들었습니다.
그래서 웹에 들어가 소스 코드를 다운로드 받았습니다.

이전에 Visual studio에서 소스 브라우저를 만들어서 소스 코드 봤던 생각이 났습니다.
VS 내에 간단한 프로젝트를 하나 생성시키고 *.c 파일들을 묶어서 컴파일해 보았습니다.

당연히 무수히 많은 error가 발생했습니다. -_-a
fatal error만 없다면 브라우저 파일을 만들 수 있으니까 하며 넘어갔습니다.
근데 error가 너무 많아서 fatal error가 뜹니다.

에러메시지는 다름과 같습니다.

resource.c
d:\myproject\linux\linux-2.6.8.1\temp\asm\system.h(88) : error C2054: expected '(' to follow 'inline'
d:\myproject\linux\linux-2.6.8.1\temp\asm\system.h(89) : error C2085: 'set_eiem' : not in formal parameter list
d:\myproject\linux\linux-2.6.8.1\temp\asm\system.h(89) : error C2143: syntax error : missing ';' before '{'
d:\myproject\linux\linux-2.6.8.1\temp\linux\timex.h(17) : error C2054: expected '(' to follow 'inline'
d:\myproject\linux\linux-2.6.8.1\temp\linux\timex.h(18) : error C2085: 'get_cycles' : not in formal parameter list
d:\myproject\linux\linux-2.6.8.1\temp\linux\timex.h(18) : error C2143: syntax error : missing ';' before '{'

그리고 에러가 발생하는 곳의 코드는

/* these are here to de-mystefy the calling code, and to provide hooks */
/* which I needed for debugging EIEM problems -PB */
#define get_eiem() mfctl(15)
static inline void set_eiem(unsigned long val)
{
	mtctl(val, 15);
}

static inline cycles_t get_cycles (void)
{
	return mfctl(16);
}

와 같습니다.

에러의 원인이 뭘까요? inline이 왜 문제가 되는지--?
에러를 회피할 수 있는 방법이 없을까요?

도움을 부탁드립니다.

doldori의 이미지

inline은 C99에서 새로 도입된 것인데 MSVC는 C99를 지원하지 않기 때문입니다.
시스템 헤더인 듯 한데 헤더를 수정할 수는 없겠죠? gcc를 쓰시든지, 꼭 MSVC여야
한다면 C++로 컴파일하는 방법도 있는데 다른 에러가 우수수 쏟아질지도
모르겠군요. :(

progcom의 이미지

#define inline

회피가.. 되려나요? :)

ohjungtaek의 이미지

#define inline 은 안되더라구요 -_-a

mjfly의 이미지

inline 이 아니라 __inline을 써보세요...

MSVC에서는 요걸 인식하는 걸로 압니다만...

댓글 달기

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