2개의 c 파일을 하나의 프로그램으로 컴파일하는 중 권한이 거부되었습니다.

2개의 c 파일을 하나의 프로그램으로 컴파일하는 중 권한이 거부되었습니다.

내 임무는 2개의 c 파일을 실행 가능한 프로그램으로 컴파일하는 것입니다. 이 프로그램의 목적은 터미널 내에서 2개의 숫자가 뒤에 호출될 때 출력에 해당 2개의 숫자의 합이 표시되어야 한다는 것입니다.

이 명령을 사용하여 두 파일을 모두 컴파일합니다.

sudo gcc main.c | gcc -c my_add.c -o mainprog

하지만 이 명령을 사용하여 터미널에서 "./mainprog 2 5"를 호출하면 "Permission Denied"라는 오류가 발생합니다.

어떤 통찰력이라도 감사하겠습니다.

이것은 첫 번째 c 파일 "main.c"입니다.

#include "my_add.c"
#include "my_add.h"
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  a = atoi(argv[1]);
  b = atoi(argv[2]);

  add(a, b);
  return 0;
}

이것은 두 번째 c 파일 "my_add.c"입니다.

#include "my_add.h"
#include <stdio.h>
#include <stdlib.h>

extern int add(inte a,int b) {
  sum = a+b;
  printf(" The sum of %d and &d is; %d\n" , a,b,sum);
}

이것은 내 헤더 파일 "my_add.h"입니다.

#ifndef __MY_ADD_H__
#define __MY_ADD_H__

int add(int x, int y);
int x;
int y;
int sum;

#endif

답변1

이것은 상당히 기본적인 C 프로그래밍 연습처럼 보입니다.

그 목적은 아마도 당신에게 첫 번째 방법을 가르치는 것입니다.엮다두 개 이상의 소스 코드 파일( *.c)을대상 파일( *.o) 각각, 그러면협회이들은 함께 실행 가능한 프로그램을 형성합니다.

대규모 프로그래밍 프로젝트의 경우 작은 변경을 수행한 후 컴파일 시간을 최소화하는 것이 중요합니다. 하나의 개체 파일만 다시 컴파일하면 되고 나머지는 이전 컴파일 시도에서 그대로 사용할 수 있습니다.

이를 사용하면 #include "my_add.c"컴파일러가 한 파일의 모든 코드를 .c다른 파일에 포함하도록 강제하기 때문에 아이디어가 무효화됩니다.파일 #include이 없어야 합니다..c, 프로그래밍 방식으로 생성된 코드나 이와 유사한 고급 작업을 수행하지 않는 한. 그래도 스타일이 별로네요.

파이프라인의 첫 번째 부분에서는 파일 컴파일 및 생성을 gcc main.c | ...시도합니다 (오류가 없는 경우) . 오직main.ca.outmain.c컴파일러 메시지파이프의 두 번째 부분으로 연결되는데, 이 부분은 사용되지 않습니다.

두 번째 부분에서는 ... | gcc -c my_add.c -o mainprog이라는 파일을 생성 mainprog하지만 여기에는 .만 포함됩니다 my_add.c. 이전 부분의 파이프된 출력은 무시됩니다. 따라서 프로그램 실행을 시작해야 하는 기능이 mainprog포함되어 있지 않기 때문에 실제로 유효한 실행 프로그램이 아닙니다 .main()

file mainprog다음과 같이 출력되는 명령을 사용하여 이를 확인할 수 있습니다 (정확한 출력은 시스템 아키텍처 및 OS 버전에 따라 다를 수 있음).

mainprog: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

이것을 eg 를 사용하여 얻은 출력과 비교하면 file /bin/ls출력에 file /bin/ls중요한 단어가 표시 executable되지 않고 포함된다는 것을 알 수 있습니다 file mainprog.

file이 명령으로 나열된 프로그램만이 executable진정으로 완전한 프로그램입니다. gcc -c my_add.c -o mainprog파일은 실제로 생성되지만 my_add.o-o mainprog옵션을 사용하면 파일 이름이 로 강제로 변경됩니다 mainprog.

예상되는 솔루션은 다음과 같아야 합니다.

  • gcc -c <filename>.c파일당 하나의 명령으로 .c해당 <filename>.o파일을 생성합니다.
  • 그리고 파일을 완전한 실행 파일로 연결하는 명령입니다 gcc -o mainprog <filename1>.o <filename2>.o..o

답변2

sudo gcc main.c | gcc -c my_add.c -o mainprog

  • 사용을 중지하세요 sudo.
  • 파이프라인을 중지합니다.
  • -c처음 호출할 때 올바른 옵션을 사용하십시오.
  • 연결 단계를 별도로 수행하십시오.

가능한 올바른 단계(질문에서 파생할 수 있는 것)

gcc -c main.c
gcc -c my_add.c
gcc main.o my_add.o -o prog

소스코드에 다른 오류가 있습니다. 작업 중인 컴파일에서 오류 메시지가 표시되면 이러한 메시지가 표시됩니다.

관련 정보