1.1.1         linux编写so文件的方式

1首先gcc编译的时候要加-fPIC选项,-fPIC是告诉gcc生成一个与位置无关的代码

2gcc链接的时候要加-shared选项,意思是生成一个so共享库。

对于linux或者unix,一个so文件,文件扩展名必须是so,文件名的前三个字母必须是lib

 

1.1.2         linux使用so

gcc链接的时候需要加-L.代表从当前目录下找相关的so文件,-l文件名(但不包括文件名开头的lib和扩展名so

例如编译一个main.o文件,要用到当前目录下的liba.so

gcc –o main.out –L. –la main.o

 

1.1.3         配置profile文件可以在当前目录下查找so文件

linux不在当前目录下寻找可执行程序,同时也不早当前目录下找so库文件

修改用户配置文件的方法

1

cd

2

vi .bash_profile

3

export LD_LIBRARY_PATH =$LD_LIBRARY_PATH:.

4

保存退出

5

. .bash_profile

chunli@ubuntu:~/link/c$ cat mymax.c int max(int a,int b){	if(a>b)		return a;	else		return b;}chunli@ubuntu:~/link/c$ cat mymax.h #ifndef MYMAX_C_#define MYMAX_C_int max(int a,int b);#endif chunli@ubuntu:~/link/c$ cat main.c #include 
#include "mymax.h"int main(){ printf("max =%d \n",max(1,4)); return 0;}chunli@ubuntu:~/link/c$ chunli@ubuntu:~/link/c$ gcc -c -o mymax.o  -fPIC  mymax.c  告诉编译器产生与位置无关代码chunli@ubuntu:~/link/c$ gcc -shared -o libmymax.so mymax.o  mymax.o 生成so共享库,必须以lib开头,扩展名必须是.sochunli@ubuntu:~/link/c$ gcc -c main.c -o main.ochunli@ubuntu:~/link/c$ gcc -o main.out main.o -L. -lmymaxchunli@ubuntu:~/link/c$ ./main.out max =4echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.' >> /home/chunli/.bashrcchunli@ubuntu:~/link/c$ . /home/chunli/.bashrc

复制到其他目录:

照样运行:

chunli@ubuntu:~/link/c$ cp libmymax.so main.out /tmp/chunli@ubuntu:/tmp$ ./main.out max =4