库文件:
预先编译好的方法的集合,简单说是指某些功能代码的集合(库文件中不允许包含main函数)
静态库:
指在链接阶段直接将库中的内容直接合并到最终的可执行文件中
静态库是功能代码编译完成后中间文件的集合,静态库所生成的可执行文件并不依赖于库文件所执行
静态库的生成命令:
1.先编译生成.o文件
gcc -c *.c
2.生成库命令
ar crv libXXXX.a *.o (XXXX代表库名)
(c 创建 r 把方法放入库中 v 显示详细过程<可不加>)
共享库(动态库):
指在链接阶段只在最终的可执行文件(不可单独执行的可执行文件)中设置使用的库,仅仅让可执行文件知道要用到的功能代码在哪个库中,真正执行时,由操作系统单独将共享库动态加载到内存上执行(必须指定系统加载库的路径)
共享库所生成的可执行文件依赖于共享库的支持
共享库的生成命令:
gcc -shared -fPIC -o libXXXX.so *.c
(也可用.o文件,.若是c文件,系统会自动帮助编译)
库的使用:
gcc -o main main.c -L(+库的路径) -lXXXX(库名)
操作系统加载库时只会在默认路径下搜索,故需要给出路径,若不给,则将动态库拷贝到/lib或/usr/lib(加载共享库默认路径)下也行,但这需要管理员权限
也可设置环境变量,使操作系统除了在默认路径下搜索外,还需要到用户指定的路径下搜索
export LD_LIBRARY_PATH=绝对路径(仅仅对当前终端有效)
若要使环境变量永久有效,可去修改配置文件/home/user/.bashrc
echo $LD_LIBRARY_PATH 查看环境变量
ldd main 查看主程序加载了哪些共享库
可执行程序,命令存放在:/bin /usr/bin
库文件:/lib /usr/lib
头文件:/usr/include