我正在尝试使用gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm
编译以下源文件。
void simple_sum(void)
#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);
}
#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
的未定义引用
答案 0 :(得分:4)
编译为
gcc -g -Wall -Wextra -pedantic -std=c99 source.c main.c -o myprog -lm
(实际上,不需要-lm
,您不需要使用<math.h>
函数;但是保留-lm
不会造成损害)
稍后,learn编写您的Makefile
,可以分几步来完成这些操作:
首先,使用{p>获取source.o
对象文件
gcc -g -Wall -Wextra -pedantic -std=c99 -c source.c
然后使用{p>获取main.o
对象文件
gcc -g -Wall -Wextra -pedantic -std=c99 -c main.c
最后,将两者链接
gcc -g source.o main.o -lm -o myprog
答案 1 :(得分:3)
这里
gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm
您没有为链接器提供源文件名,因此它会抛出类似
的错误对“ main”的未定义引用
编译时提供源文件main.c
和source.c
。例如,首先运行此
gcc -g -Wall -Wextra -pedantic -std=c99 -c main.c source.c -lm
创建对象.o
文件,然后通过运行来创建可执行文件
gcc source.o main.o -o my_exe
最后运行可执行文件。此外,simple_sum()
缺少;
的声明应该是
void simple_sum(void); /* you miss ;*/
还按照@Basile的指示学习如何使用https://github.com/ohabash/fornida-ng6/进行编译,您无需手动创建.o
文件,您的Makefile
将创建.o
文件&如果正确编写则进行编译。