1、当前目录 /home/xuanmiao/Demo/LSPT/Test 创建文件prime.h和prime.c
prime.h
int isprime(long int number);
prime.c
int isprime(long int number)
{
long int j;
int prime = 1;
/* Test if the number is divisible, starting
* from 2 */
for(j=2; j<number; j++)
{
/* Use the modulo operator to test if the
* number is evenly divisible, i.e., a
* prime number */
if(number%j == 0)
{
prime = 0;
}
}
if(prime == 1)
{
return 1;
}
else
{
return 0;
}
}
2、当前目录 /home/xuanmiao/Demo/LSPT/Test 根据prime.c编译生成目标文件prime.o
gcc -Wall -Wextra -pedantic -fPIC -c prime.c
-Wall
:这是gcc编译器的一个选项,它告诉编译器输出所有可能的警告信息。
-Wextra
:这个选项使gcc产生一些额外的警告,这些警告超出了-Wall选项产生的警告。
-pedantic
:这个选项告诉gcc,要遵守所有的ISO C和ISO C++标准。
-fPIC
:这个选项生成位置无关代码(Position Independent Code),这样的代码可以在任何地方执行,而不会受到自身所在内存位置的影响。\n- -c
:这个选项告诉gcc编译或汇编源文件,但不要链接。
prime.c
:这是你要编译的C源文件。
3、当前目录 /home/xuanmiao/Demo/LSPT/Test 根据目标文件prime.o生成动态链接库libprime.so
gcc -shared -Wl, soname, libprime.so -o libprime.so prime.o
4、当前目录 /home/xuanmiao/Demo/LSPT/Test 编辑调用函数
is-it-a-prime.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "prime.h"
int main(int argc, char *argv[])
{
long int num;
/* Only one argument is accepted */
if (argc != 2)
{
fprintf(stderr, "Usage: %s number\n",
argv[0]);
return 1;
}
/* Only numbers 0-9 are accepted */
if ( strspn(argv[1], "0123456789") !=
strlen(argv[1]) )
{
fprintf(stderr, "Only numeric values are "
"accepted\n");
return 1;
}
num = atol(argv[1]); /* String to long */
if (isprime(num)) /* Check if num is a prime */
{
printf("%ld is a prime\n", num);
}
else
{
printf("%ld is not a prime\n", num);
}
return 0;
}
5、当前目录 /home/xuanmiao/Demo/LSPT/Test 编译is-it-a-prime.c 源文件
gcc -L${PWD} is-it-a-prime.c -o is-it-a-prime -lprime
这条命令是在使用GCC编译器编译并链接一个C语言源文件(is-it-a-prime.c),同时链接到一个名为libprime的库。这里的各个参数的含义如下:\n- -L${PWD}
:这个选项告诉gcc在哪里查找库文件,PWD表示当前目录。\n- is-it-a-prime.c
:这是你要编译的源文件。\n- -o is-it-a-prime
:这个选项指定了输出文件的名字。\n- -lprime
:这个选项告诉gcc链接到名为libprime的库。
6、设置环境变量$LD_LIBRARY_PATH为当前目录
export LD_LIBRARY_PATH=PWD:{PWD}:PWD:{LD_LIBRARY_PATH}
7、例如下面文件interest.c中使用了pow函数,这个函数来自标准库中的math库libm,在ubuntu中在/usr/lib/x86_64-linux-gnu目录下
interest.c
#include <stdio.h>
#include <math.h>
int main(void)
{
int years = 15; /* The number of years you will
* keep the money in the bank
* account */
int savings = 99000; /* The inital amount */
float interest = 1.5; /* The interest in % */
printf("The total savings after %d years "
"is %.2f\n", years,
savings * pow(1+(interest/100), years));
return 0;
}
xuanmiao@linux:/usr/lib/x86_64-linux-gnu$ pwd
/usr/lib/x86_64-linux-gnu
xuanmiao@linux:/usr/lib/x86_64-linux-gnu$ ls | grep [libm.so](http://libm.so)
[libm.so](http://libm.so)
libm.so.6
在编译interest.c时需要指定libm库:gcc interest.c -o interest -lm
标签:prime,gcc,libm,GNU,int,链接库,编译器,xuanmiao,interest From: https://www.cnblogs.com/xuanmiao363/p/17709125.html