[질문] gcc: cannot specify -o with -c or -S and multiple com

antz의 이미지

gcc: cannot specify -o with -c or -S and multiple compilations
vixie-cron-3.0.1-76.src.rpm
빌드 하면 서 발생했구요.

Quote:
...
+ /usr/bin/make CC=gcc 'RPM_OPT_FLAGS=%{rpmcflags}' 'LDFLAGS=%{rpmldflags}'
gcc %{rpmcflags} -I. -DPOSIX -c -o cron.o cron.c
gcc: cannot specify -o with -c or -S and multiple compilations
make: *** [cron.o] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.29202 (%build)
...

< 전에도 다른 소스 컴파일 할때 이런 에러를 봐서 질문드립니다. >
< 그때는 Makefile에서 "-o" 옵션을 빼구 컴파일 했었지요. >

헌데 vixie-cron 소스를 풀어서 컴파일 하면 에러가 안납니다. :?:

Quote:
[dhjang@delta vixie-cron-3.0.1]$ sudo make
Password:
cc -I. -DPOSIX -c -o cron.o cron.c
cc -I. -DPOSIX -c -o database.o database.c
cc -I. -DPOSIX -c -o user.o user.c
...

일관성도 없어 보이고... (rpm빌드에서는 에러나고, 컴파일에서는 에러안나고...)

어떨때 -o는 -c또는 -S와 같이 쓸수없다고 나오는 걸까요?

arimae의 이미지

저도 위의 에러는 자세히 모르겠고..
우선 -c -o -S -E 등은 gcc 에서 overall option 이라고 man gcc 하니 나오는군요.

-c 는 오브젝트 파일 생성, -S 는 어셈블리 파일 생성 -E 는 preprocessing 까지만 작업 한다고 합니다.

보통 우리가 실행파일을 만들때 아래와 같이 -o 옵션으로 실행파일 이름을 지정합니다.

gcc -o execute_file_name object_file1 object_file2 object_file3

이런식으로. 만들죠.. 따라서 -o 뒤에는 반드시 실행 파일 이름이 지정되야 한다고 생각들을 하는데(저도 방금전에 테스트 하기전까지는 그런줄 알았습니다.) 그게 아니라 -o 는 -c , -S, -E 에 의해 생성되는 파일을 명시적으로 지정해줄때 사용합니다.

예를 들어 test1.c 파일을 gcc -c test1.c 라고 명령을 내리면 test1.o 라는 오브젝트 파일이 생성됩니다. 하지만 gcc -o test1.obj -c test1.c 라고 하면 test1.o 라고 생성되는 것이 아니라 test1.obj 라고 오브젝트 파일이 생성됩니다.

-S의 경우도 마찬가지입니다. 보통은 file_name.S 라는 파일의 어셈블리 파일이 생성되지만, -o 옵션을 이용해서 생성하는 파일을 명시적으로 지정해 줄 수 있습니다.

위의 경우도 마찬가지 이겠죠.
cc -I. -DPOSIX -c -o cron.o cron.c 라고 하면 cron.c 를 컴파일 해서 그 오브젝트 파일을 cron.o 라고 생성할 것입니다.

위에서 주의 할 점은 대상 파일을 하나만 지정해야 합니다. 예를 들어 위의 경우 cron.c 만 컴파일 작업을 하게 됩니다. 하지만 한꺼번에 여러개의 파일을 지정할 경우 (오브젝트 생성을 마친후 전부다 링크 작업할때 처럼) gcc: cannot specify -o with -c or -S and multiple compilations 라는 에러 메시지를 출력합니다.

[arimae@ts arimae]$ gcc -c -o test.obj test.c test2.c
gcc: cannot specify -o with -c or -S and multiple compilations

위의 예를 보면 -c 로 오브젝트 파일을 생성하면서 test.c 와 test2.c 를 지정하니까 위와 같은 에러메시지가 출력되는 것을 확인 할 수 있습니다.

Quote:
...
+ /usr/bin/make CC=gcc 'RPM_OPT_FLAGS=%{rpmcflags}' 'LDFLAGS=%{rpmldflags}'
gcc %{rpmcflags} -I. -DPOSIX -c -o cron.o cron.c
gcc: cannot specify -o with -c or -S and multiple compilations
make: *** [cron.o] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.29202 (%build)
...

여기서 %{rpmcflags} 무엇인지 몰라 정확한 이유를 모르겠지만, 아마 위와 같은 이유때문이 아닐까 생각됩니다.

저도 방금전에 테스트해서 알아서 틀린 내용이 있을 수도 있습니다.
혹시 틀린 부분이 있다면 지적해 주시면 감사하겠습니다.

Dream, Passion and Challenge..

댓글 달기

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