linux操作系统下编译静态库与动态库

linux操作系统下编译静态库与动态库
    linux的库文件分为两种,一种是静态库(*.a文件,相当于Windows下的*.lib文件),另一种是动态库(*.so文件,相当于Windows下的*.dll文件)。编译时,一种就是把自己编译的.o文件(相当于Windows下的.obj文件)和静态库一起链接成可执行文件,另一种就是只编译.o文件,当运行时,调用动态库中的函数时,再载入动态库。
    编译方法如下:
    1. 静态库
    假如源文件件为:main.c, mystatic.c。
    1) 将mystatic.c编译成静态库libmystatic.a,在main.c中调用此库中的函数。
        gcc -c -I inlcude -o mystaic.o mystatic.c // 将mystatic.c编译成目标文件mystatic.o
        ar -rs lib/libmystaic.a mystatic.o // 将目标mystaic.o加入libmystatic.a库中(库文件需以lib开头),如果libmystatic.a不存在创建此库
    2) 再将main.c编译成可执行文件test。
        gcc -I include -L lib -o test main.c -lmystatic -static
    则编译成功,在文件夹lib下成功生成libmystatic.a的库文件,并编出的可执行程序test运用了库libmystatic.a
    2. 动态库
    源文件件为:main.c, mydynamic.c。
    1) 将mydynamic.c编译成动态库libmydynamic.so,在main.c中调用了此库中的函数。
        gcc -I include -shared -o lib/libmydynamic.so mydynamic.c // 库文件需以lib开头
    2) 将main.c编译成可执行文件test。
        gcc -I include -L lib -o test main.c -lmydynamic // 不带参数-static,默认为动态编译
    3) 运行可执行程序test。
        在运行程序test时,系统会在系统默认的库文件目录下搜索mydynamic.so,如果找不到运行失败。需将刚才编译的动态库目录加入系统,具体方法如下:
        修改~/.bash_profile(此文件为隐藏文件,用ls -a ~/可将其显示出来)文件,在文件末尾加入:
        LD_LIBRARY_PATH=*** #(***为libmydynamic.so所在的目录)
        export LD_LIBRARY_PATH
        重新登入系统,运行可执行文件test文件将会成功。
 

3.编译时要使用共享库dl 其中有dlopen dlsynm dlerror dlclose 函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值