LinuxC(环境变量、动态库)

环境变量:

       PATH就是一个环境变量,存放的是一些系统或者软件的路径,在PATH中添加过路径的应用程序,可以直接使用文件名进行调用。

环境变量的配置:

1)         Windows 系统的配置

我的电脑 => 右键,选择属性 => 高级 => 环境变量 => 系统变量PATH => 在原来的PATH后加分号‘;’加具体的路径。

2)         linux系统环境变量

export PATH=$PATH:.

解析:$PATH – 将原来的PATH的内容获取出来

                : - 各种路径之间的分割符号

                .      - 当前目录

echo  $PATH  - 将PATH的内容打印出来(回显)。

只会在当前终端中有用,想永久有用则可以打开

vi ~/.bashrc <回车>

在该文件的末尾添加

export PATH=$PATH:.

  执行source~/.bashrc 这样就可以让配置文件生效。

3)         编程相关的环境变量

CPATH – C语言头文件的路径

LIBRARY_PATH – 库文件的路径

LD_LIBRARY_PATH – 加载共享库的路径

4)         查找头文件

a)      <>表示从系统默认的路径下查找该文件

一般来说在  /usr/include/目录下

b)     “”表示从当前文件目录下查找该文件

c)      配置相关的环境变量CPATH

如:     export CPATH=$CPATH:.. 

d)     通过编译选择项指定头文件的位置

gcc –I文件路径 xxx.c

大写I后面跟路径

库文件

       为了调用者使用方便,一般程序不会直接提供.c文件或.o文件,而是将文件打包成具体的库文件,只需要提供库文件和对应的头文件即可。

1)分类

       库文件主要分为:静态文件 和 共享库文件

2)比较

静态库:

       使用静态库时,直接把代码/指令复制到目标文件中,目标文件显得比较庞大,修改和维护都不方便;可以脱离静态库文件,效率比较高。

共享库:

       使用共享库时,把代码/指令对应的地址复制到目标文件中,目标文件比较小,修改和维护比较方便;不可以脱离共享库文件,效率比较低(使用频繁)。

3)相关的命令

       Ldd  a.out => 查看a.out 所以来的动态库文件

       gcc/cc  -static  xxx.c =>要求按照静态库方式编译链接,得到的可执行文件会比较大。

静态库文件的生成布局和使用

(1)静态库的生成步骤

a)      编写源代码 xxx.c 如:adder.c

b)     只编译不连接,如:gcc  -c  adder.c 生成adder.o

c)      使用命令ar  –r  lib库名.a  xxx.o生成静态库

如: ar  –r(插入)  libadder.a adder.o

(2)静态库的使用步骤

a)      编写调用的源程序 xxx.c 如vi  main.c

b)     只编译不连接源程序如:gcc  –c  main.c

c)      链接目标文件和静态库文件

                       i.             直接链接

gcc  main.o  libadder.a

                     ii.             通过选项链接(掌握)

gcc main.o  –l(小写)库名  –L(大写).库文件所在路径

gcc  main.o  –l adder  –L.   

                   iii.             配置环境变量LIBRARY_PATH

Export LIBRARY_PATH=$LIBRARY_PATH:.  

gcc  main.o  –l adder

                                                                                                                                    

共享库的生成步骤和使用步骤

(1)共享库的生成步骤

a)      编写源程序xxx.c 如:adder.c

b)     只编译不连接

如:gcc  –c  –fpic(小模式)  adder.c

c)      使用选项生成共享库

如:gcc  -shared adder.o –o lib库名 .so

(2)  共享库的使用步骤

a)    直接链接

gcc  main.o  libadder.so

b)   使用选项链接

gcc  main.o  -l adder  -L.  

c)    使用环境变量LIBRARY_PATH

export LIBRARY_PATH=$LIBRARY_PATH:.  

gcc  main.o  –l  adder

注意:

       对共享库文件的使用,要配置环境变量后再运行

       export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.  

 

关于共享库文件的动态加载

dlopen 函数

#include<dlfcn.h>

void *dlopen(const char *filename, int flag);

第一个参数:文件名

第二个参数:打开标志/打开方式

              RTLD_LAZY -----延迟加载

              RTLD_NOW-----立即加载

函数的功能:

       按照第一个参数指定的文件名去(延迟/立即)加载动态库。

成功返回一个void * 的句柄。

dlerror函数

char *dlerror(void);

函数功能:表示返回最后一次错误的信息,如果没有错误就返回NULL

dlsym函数

void *dlsym(void *handle, const char *symbol);

第一个参数:dlopen函数的返回值

第二个参数:字符串类型的函数名

函数功能:获取handle指向的共享库文件中的symbol加载

dlclose函数

int  dlclose(void*handle);

函数功能:关闭指定的共享库文件

注意:编译时需要增加 -ldl

作业:

编程打印空心的菱形和实心菱形,分别使用静态库的方式和动态库的方式进行打包和使用。

       ****                         ****

        ****                       *  *

        ****                             *  *

         ****           ****

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值