내 임무는 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.c
a.out
main.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
소스코드에 다른 오류가 있습니다. 작업 중인 컴파일에서 오류 메시지가 표시되면 이러한 메시지가 표시됩니다.