共享库的使用(.so)文件
1、共享库的概念
2、创建共享库命令
gcc -shared -fpci -o lib/libmath.so obj/mymath.o
具体加不加 fpci 这个要看平台支持吧支持;具体详情可以查阅 shared的相关参数文档
这里有一个-fPIC参数
PIC就是position independent code
PIC使.so文件的代码段变为真正意义上的共享
如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置.
3、使用共享库命令
daokr@ubuntu:/mnt/hgfs/mystudy/clession$ gcc -shared -o lib/libmymath.so obj/mymath.o daokr@ubuntu:/mnt/hgfs/mystudy/clession$ gcc -o bin/mymath_test2008 obj/mymath_test.o -Llib -lmymath daokr@ubuntu:/mnt/hgfs/mystudy/clession$ ./bin/mymath_test2008 ./bin/mymath_test2008: error while loading shared libraries: libmymath.so: cannot open shared object file: No such file or directory daokr@ubuntu:/mnt/hgfs/mystudy/clession$
daokr@ubuntu:/mnt/hgfs/mystudy/clession$ sudo cp lib/libmymath.so /usr/lib
daokr@ubuntu:/mnt/hgfs/mystudy/clession$ ./bin/mymath_test2008
注意:
这样中直接回报错;说是不能够去打开这个共享库文件;两种方式解决这个错误
1)cp libmymath.so /usr/lib (需要root用户)
2)export LD_LIBRARY_PATH=库文件的目录 (这个是临时的;在开个窗口就没啥用了;执行的
./bin/mymath_test2008 不会被执行
)
佛语:我本求心不求佛,了知三界空无物,若欲求佛但求心,只这心心心是佛