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

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

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

hello.h     

#include 
#include 

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

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






 


你可能感兴趣的:(gcc生成.so文件及.so文件的使用)