一、实验目的
1、熟悉Linux常用命令;
2、掌握gcc编译器、gdb调试器的使用方法;
3、会编写多文件的C程序,并使用gcc编译;
4、熟悉makefile的结构和编制,利用make命令编译程序。
二、实验内容
1、编写包含多文件的.c源码,通过调用自定义函数,实现功能:用户输入一个数字,程序计算并输出介于1至此数之间所有个位数为1的素数;如果不存在,则打印-1;
2、直接使用gcc编译多个源文件并运行结果;
3、通过创建动态链接库lib***.so,使得 main 函数调用自定义函数时,可使用动态链接库,编译生成运行结果;
4、编写Makefile文件,使用make编译并运行。
三、源程序
prime.h(求素数的头文件):
#include <stdbool.h>
#include <math.h>
bool isPrime(int num);
prime.c(求素数的函数):
#include "prime.h"
// 判断是否是素数
bool isPrime(int num)
{
const int sqrt_num = (int)(sqrt(num));
for (int i = 2; i <= sqrt_num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
main.c(主程序):
#include <stdio.h>
#include "prime.h"
int main(int argc, char const *argv[])
{
int num;
printf("请输入一个数:\n");
scanf("%d", &num);
if(num <= 10)
{
// 前5个素数为2, 3, 5, 7, 11
printf("-1\n");
}
else
{
// 前11个素数为2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31
printf("11 ");
// 个位数为1, 每次加10
for (int i = 31; i <= num; i+=10)
{
if(isPrime(i))
{
printf("%d ", i);
}
}
printf("\n");
}
return 0;
}
makefile:
main.c.o:main.c
gcc -o main.c.o main.c ./libprime.so -lm
四、实验步骤、结果截图
(1)直接使用gcc编译多个源文件并运行结果。
(2)通过创建动态链接库libprime.so,使得 main 函数调用自定义函数时,可使用动态链接库,编译生成运行结果。
1. 生成动态链接库:
2. 编译生成运行结果:
(3)编写Makefile文件,使用make编译并运行。