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

来源:互联网 发布:淘宝店铺装修免费素材 编辑:程序博客网 时间:2024/05/10 06:39

    .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的时候会先去访问该路径,找不到则依次往后查找。






 


0 0
原创粉丝点击