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
转载于:https://blog.51cto.com/990487026/1771934