无法使用 gcc 编译 link main.c 到另一个源文件
Unable to compile and link main.c to another source file using gcc
我正在尝试使用 gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm
编译以下源文件。
source.h
void simple_sum(void)
source.c
#include "source.h"
#include <stdio.h>
void simple_sum(void)
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d + %d = %d\n",a, b, a + b);
}
main.c
#include "source.h"
#include <stdio.h>
int main(void)
{
printf("\n");
simple_sum();
return 0;
}
我收到以下错误:
gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function _start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:6: recipe for target 'main' failed
make: *** [main] Error 1
有人可以建议如何解决这个问题吗?
编辑
当我 运行 使用 gcc -g -Wall main.c -o main
时出现以下错误
/tmp/ccEAL4iG.o: In function
主要':
/home/a/aalto_university/functions/calculation/main.c:7:对 simple_sum'
collect2: error: ld returned 1 exit status
的未定义引用
这里
gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm
你没有向链接器提供源文件名,因此它会抛出类似
的错误
undefined reference to `main'
编译时提供源文件main.c
和source.c
。例如第一个运行这个
gcc -g -Wall -Wextra -pedantic -std=c99 -c main.c source.c -lm
创建对象.o
文件,然后通过 运行ning
创建可执行文件
gcc source.o main.o -o my_exe
最后是 运行 可执行文件。另外 simple_sum()
的声明缺少 ;
它应该是
void simple_sum(void); /* you miss ;*/
还学习如何使用 Makefile 进行编译,正如@Basile 指出的那样,您不必手动创建 .o
文件,您的 Makefile
将创建 .o
文件并编译,如果它写得正确。
编译
gcc -g -Wall -Wextra -pedantic -std=c99 source.c main.c -o myprog -lm
(实际上,不需要-lm
,您不使用<math.h>
函数;但保留-lm
应该没有坏处)
稍后,learn 编写您的 Makefile
分几步完成这些事情:
首先,使用
获取source.o
目标文件
gcc -g -Wall -Wextra -pedantic -std=c99 -c source.c
然后用
得到main.o
目标文件
gcc -g -Wall -Wextra -pedantic -std=c99 -c main.c
最后,link他们两个
gcc -g source.o main.o -lm -o myprog
我正在尝试使用 gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm
编译以下源文件。
source.h
void simple_sum(void)
source.c
#include "source.h"
#include <stdio.h>
void simple_sum(void)
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d + %d = %d\n",a, b, a + b);
}
main.c
#include "source.h"
#include <stdio.h>
int main(void)
{
printf("\n");
simple_sum();
return 0;
}
我收到以下错误:
gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function _start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:6: recipe for target 'main' failed
make: *** [main] Error 1
有人可以建议如何解决这个问题吗?
编辑
当我 运行 使用 gcc -g -Wall main.c -o main
/tmp/ccEAL4iG.o: In function
主要':
/home/a/aalto_university/functions/calculation/main.c:7:对 simple_sum'
collect2: error: ld returned 1 exit status
这里
gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm
你没有向链接器提供源文件名,因此它会抛出类似
的错误undefined reference to `main'
编译时提供源文件main.c
和source.c
。例如第一个运行这个
gcc -g -Wall -Wextra -pedantic -std=c99 -c main.c source.c -lm
创建对象.o
文件,然后通过 运行ning
gcc source.o main.o -o my_exe
最后是 运行 可执行文件。另外 simple_sum()
的声明缺少 ;
它应该是
void simple_sum(void); /* you miss ;*/
还学习如何使用 Makefile 进行编译,正如@Basile 指出的那样,您不必手动创建 .o
文件,您的 Makefile
将创建 .o
文件并编译,如果它写得正确。
编译
gcc -g -Wall -Wextra -pedantic -std=c99 source.c main.c -o myprog -lm
(实际上,不需要-lm
,您不使用<math.h>
函数;但保留-lm
应该没有坏处)
稍后,learn 编写您的 Makefile
分几步完成这些事情:
首先,使用
获取source.o
目标文件
gcc -g -Wall -Wextra -pedantic -std=c99 -c source.c
然后用
得到main.o
目标文件
gcc -g -Wall -Wextra -pedantic -std=c99 -c main.c
最后,link他们两个
gcc -g source.o main.o -lm -o myprog