首页 > 其他分享 >动态链接库的生成和使用

动态链接库的生成和使用

时间:2024-01-14 12:22:38浏览次数:33  
标签:prime gcc libm int xuanmiao 生成 interest 使用 动态链接库

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,int,xuanmiao,生成,interest,使用,动态链接库
From: https://www.cnblogs.com/czy363/p/17963534

相关文章

  • CAN通信配置过滤器和使用三个邮箱发送
    RM比赛用的电机基本都使用CAN通信,但是一条CAN线上只用一个发送邮箱在挂在设备多的情况可能会导致发送不完,但其实完全可以把三个发送邮箱都用上。这里贴一下自己的CAN筛选器,接收以及发送的代码。完整的工程可以看我开源的飞机云台程序~项目代码开源地址:https://github.com/ittuann......
  • Keil的一点使用技巧
    在开发中Keil的一点使用技巧:使用ARMV6编译器和gun11标准;查找导致进入HardFault_Handler的函数;SAVE命令将数据导出到文件;开启FPU硬件浮点数和添加DSP库使用ARMV6编译器和gun11标准ARMV5编译器已经停止开发了,是时候换到V6编译器了。工具栏OptionsforTarget-Target-CodeGen......
  • 系统无ifconfig,一条命令获取本机ip并将其赋值给指定变量来使用
    在Linux系统中,准确地获取本机IP信息是非常有用的。在写bashshell脚本事经常会用到IP,这时就需要我们使用一些办法获取本机IP并赋值给变量来使用。最近刚刚完成grep及sed的摸索、研究,本着学以致用的原则,用一条命令获取本机IP并将其赋值给某个变量来使用。由于CentOS7.2中已经不再集......
  • Oracle 11gR2 中使用expdp导出数据
    一:导出前期准备:1.创建目录对象:CREATEDIRECTORYdump_dirAS‘c:\dump’;2.在操作系统上创建相应的目录。3.把目录的读写权限给用户:GRANTREAD,WRITEONDIRECTORYdump_dirTOscott;二:导出的模型1.导出表expdpscott/tigerDIRECTORY=dump_dirDUMPFILE=tab.dmplogf......
  • Linux通配符的使用详解
    一、简介一般生产环境的服务器默认都是不安装图形化界面的,习惯了在命令行环境下工作是,大家会发现:命令行操作效率比图形化界面效率高很多。由命令行环境中,我们不能直观地看到一些文件或目录的名称及其他一些信息,这时候通配符就派上用场啦!当不知道真正字符或懒得输入完整文件或目录名......
  • Linux中find命令的使用详解(上)
    find命令是各种Linux发现版中比较重要的、常用的一个命令,该命令功能强大,熟练掌握了这个命令的使用,对平时的系统运维、管理工作会起到事半功倍的效果。一.获取帮助信息[root@root@GeekDevOps-find~]#find--help[root@root@GeekDevOps-find~]#manfind大家会发现帮助信息很多,但......
  • 浅谈Linux下傻瓜式磁盘分区工具cfdisk的使用
    对于新手来说,Linux环境下的磁盘分区可能还会存在一些困难。对于熟悉Linux的朋友来说,我们还有fdisk、parted(2TB以上的磁盘分区使用)等磁盘分区工具可以使用。在我们新增磁盘或者在原来磁盘上进行扩容时就会使用到磁盘分区工具,磁盘分区对于整个系统的管理十分重要。1.增加一块容量......
  • 再议Linux中一些发行版中默认下载或上传工具curl的使用
    在目前的CentOS最小化安装发行版中,系统默认的下载/上传工具为:curl。curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。我们先来大概看一下curl工具的各选项的大概含义。-a/–append......
  • C#生成Excel文件
    在实际运用当中,我是将数据插入到EXCEL模板中,然后生成出带有数据的文档,并将生成的文档传入到FTP当中去的,这篇文章用来记录怎么将数据插入到EXCEL模板中。我的项目是winform程序,我将模板存放在exe程序的根目录下。在写这个方法的时候,我传入了三个参数1、数据源DataModel ;我的数据......
  • Aspose.Words使用word模板中的书签/域插入信息并导出
    首先我大概叙述一下我对这个东西的理解毕竟我也只是记录一下,确保下次自己在看的时候可以看懂,所以写的比较详细且傻瓜首先这个word文档不是凭空生成的,是你事先就把文档创建好的,里边的内容,格式都是实现创建好的只留下一些需要插入数据的地方,当然这些需要插入数据的地方也不是空着的......