gcc生成.so文件及.so文件的使用

    .so文件在linux中正如.dll文件在windows中,作为动态链接库,该类型的文件有着极其重要的作用。那如何自己编写.so文件呢,编写的文件如何使用呢?

  首先我们的源文件如下所示

hello.h     

#include <stdio.h>
#include <stdlib.h>

void hello();

hello.c

#include "hello.h"
void hello()
{
    printf("this is in hello...\n");
}

我们就是打算将这两个文件编译成.so文件  使用命令 gcc hello.c -shared -fPIC -o libhello.so就可以得到文件名为libhello.so的文件了。

其中 -shared选项说明编译成的文件为动态链接库,不使用该选项相当于可执行文件

 -fPIC 表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的。所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

hello_b.c

<pre name="code" class="cpp">#include "hello.h"
int main()
{
    hello();
    return 0;
}

 

编译该文件gcc hello_b .c-L. -lhello hello 生成hello文件

其中-L. 表示链接的文件在当前目录下    

-lhello 代表链接的文件名 gcc会自动为其前面添加lib,在其后边添加.so 即libhello.so

使用ldd hello会看到可执行文件hello所有链接的动态库,你会发现libhello.so显示的是找不到文件,所以需要修改环境变量。


export LD_LIBRARY_PATH=your path : $LD_LIBRARY_PATH: 

这条命令相当与在LD_LIBRARY_PATH前追加一个路径,也就是你的动态链接库所在的路径,当运行hello的时候会先去访问该路径,找不到则依次往后查找。






 


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值