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
[email protected]:~/link/c$ cat mymax.c int max(int a,int b) { if(a>b) return a; else return b; } [email protected]:~/link/c$ cat mymax.h #ifndef MYMAX_C_ #define MYMAX_C_ int max(int a,int b); #endif [email protected]:~/link/c$ cat main.c #include <stdio.h> #include "mymax.h" int main() { printf("max =%d \n",max(1,4)); return 0; } [email protected]:~/link/c$ [email protected]:~/link/c$ gcc -c -o mymax.o -fPIC mymax.c 告诉编译器产生与位置无关代码 [email protected]:~/link/c$ gcc -shared -o libmymax.so mymax.o mymax.o 生成so共享库,必须以lib开头,扩展名必须是.so [email protected]:~/link/c$ gcc -c main.c -o main.o [email protected]:~/link/c$ gcc -o main.out main.o -L. -lmymax [email protected]:~/link/c$ ./main.out max =4 echo ‘export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.‘ >> /home/chunli/.bashrc [email protected]:~/link/c$ . /home/chunli/.bashrc
复制到其他目录:
照样运行:
[email protected]:~/link/c$ cp libmymax.so main.out /tmp/ [email protected]:/tmp$ ./main.out max =4
时间: 2024-10-01 17:29:16