-
远程连接linux服务器
通过ssh创建远程链接 命令:ssh-keygen -t ras 创建公钥和密钥 在ssh目录下创建authorized_keys将公钥内容拷贝进authorized_keys文件
-
静态库
库文件是计算机上的一类文件 可以把库文件看成一种代码仓库 给提供者一些可以拿用的变量、函数或类
库的好处就是 1.代码保密 2.方便部署和开发
-
静态库的制作
静态库就是程序的链接阶段就被复制在了程序中
使用gcc -c 命令将.文件编译成.o文件
库的命名规则:linux下:libxxx.a lib:前缀(固定) xxx:库的名字 .a后缀(固定) windows:libxxx.lib
在使用(工具archive命令)ar rsc libxxx.a xxx.o xxx.o
r 将文件插入备份文件中 c 建立备案文件 s 索引
最后使用执行命令 gcc main.c -o app -I ./include/ -l calc -L ./lib 编译main文件
-i(大写) 指找main函数中用到的头文件 -l(L的小写)指你要用到的库名字 -L指找到链接生成的库
-
动态库
linux:libxxx.so lib:前缀(固定) xxx:库的名字 .so:后缀(固定)在linux下是一个可执行文件 windows:libxxx.dll
-
动态库的制作
使用gcc -c -fpic(FPIC) *.c文件 生成动态库的.o文件 再使用gcc -shared *.o文件 -o libxxx.so
-
工作原理
静态库:gcc进行链接时 会把静态库中的代码打包到可执行文件中
动态库:gcc进行链接时 动态库的代码不会被打包到可执行程序中
程序启动后 动态库会被动态加载到内存中 通过 ldd(list dynamic dependencied)命令检查动态库的依赖关系
-
如何定位动态库
当系统加载可执行代码时候 能够知道其所依赖的库的名字 但还需要知道绝对路径 此时就需要系统的动态载入器来获取该绝对路径 对于elf格式的可执行程序 是由ld-linux.so来完成的,它先后搜索elf文件的ST_PATH段→环境变量→LD_LIBRARY_PATH→/etc/ld.so.cache文件列表→/lib/,/usr/lib目录找到库文件后将其载入内存
1.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:编译好的可执行文件路径 $LD_LIBRARY_PATH:表示在当前环境目录下追加可执行文件路径
2.在user用户上 vi .bashrc 文件 追加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:可执行文件路径 最后使用. .bashrc 或 source .bashrc
3.在root用户上vi /etc/profile文件 追加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:可执行文件路径 最后使用. /etc/profile 或 source /etc/profile
4.通过**/etc/ld.so.cache**文件列表(注意此文件是二进制表要间接修改) 通过/etc/ld.so.conf 将可执行文件的路径写进去 最后sudo ldconfig 更新
5.将动态库文件拷贝到**/lib/,/usr/lib文件目录下(不建议防止误操作)**
- 静态库和动态库的对比