怎样创建库文件,静态库和动态库

一,实训目的

    通过对linux下的库文件的制作,进一步巩固库文件制作的理解

二,实训内容

   (1)使用gedit编辑器,在同一目录下编辑三个简单的程序:main.cku1.cku2.c的文件中
//main.c
#include <stdio.h>

extern int max1();

int  x;
int  y;


int main()
{
   printf("please input two number:\n");
   scanf("%d%d", &x, &y);
   printf("max is %d\n", max1());
}

//ku1.c
extern int max2();

int max1()
{
  int c;
  c = max2();
   return  c;
}
//ku2.c
extern  int x;
extern  int y;

int max2()
{
   int sum;
   int product;
   sum=x+y;
   product=x*y;
   return  sum>product? sum:product;
}

   (2)制作出ku1.oku2.omain.o文件
   (3)制作出libku.a
   (4)制作出可执行程序main
   (5)运行验证(删除libmyfile1.a再验证)
   (6)删除main
   (7)制作出libku.so
   (8)制作出可执行程序main
   (9)运行验证(注意目录/usr/lib/下的libku.so文件)

三,实训步骤

   (1)在工作目录下新建文件main.cku1.c  ku2.c,并用Vi启动:vi  main.c、 vi  ku1.c 、 vi  ku2.c
   (2)在shell中输入命令:
              gcc  -c  main.c  -o   main.o  ,然后输入命令ls验证
              gcc  -c  ku1.c  -o    ku1.o    ,然后输入命令ls验证
              gcc  -c  ku2.c  -o    ku2.o    ,然后输入命令ls验证                 
   (3)在shell中输入命令 #ar cr  libku.a  ku1.o ku2.o ,然后输入命令ls验证
   (4)在shell中输入命令 #gcc main.o  libku.a  -o main  
   (5)输入命令:#./main 运行验证,删除libku.a后再运行验证
   (6)在shell中输入命令 #gcc -shared -fPCI -o libku.so ku1.o ku2.o ,然后输入命令ls验证
   (7)在shell中输入命令 #gcc main.o  -L. -lku -o   main
   (8)输入命令:#./main 运行验证,
        若不能运行  
        将libku.so复制到/usr/lib/目录下, 再后运行验证

1:使用ldd main 可查询可执行程序使用的库文件来自哪里

    思考以下几个命令的区别:

          gcc main.o  -L.  -lku -o   main

          gcc main.o  ./libku.so -o   main

  gcc main.o  libku.so   -o   main

2

    无论何时载入程序打算运行时,共享库都应该位于以下位置:

 

    (1)环境变量LD_LIBRARY_PATH列出的所有用分号分隔的位置

          export  LD_LIBRARY_PATH=~~~~~~:$LD_LIBRARY_PATH

    (2)文件/etc/ld.so.cache中找到的库的列表,由工具ldconfig维护

    (3)目录/lib

4)目录/usr/lib

注3:

如果发生如下报错

error while loading shared libraries:  cannot restore segment prot after reloc: Permission denied

错误原因在于selinux禁用了访问此共享库

解决办法: 关闭selinux

1、编辑/etc/selinux/config文件,找到SELINUX=enforcing,改为SELINUX=disabled

2、编辑/etc/sysconfig/selinux文件,找到SELINUX=enforcing,改为SELINUX=disabled

3、重启电脑







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值