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 <stdio.h>
#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开头,扩展名必须是.so
chunli@ubuntu:~/link/c$ gcc -c main.c -o main.o
chunli@ubuntu:~/link/c$ gcc -o main.out main.o -L. -lmymax
chunli@ubuntu:~/link/c$ ./main.out 
max =4




echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.' >> /home/chunli/.bashrc


chunli@ubuntu:~/link/c$ . /home/chunli/.bashrc




复制到其他目录:

照样运行:

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