linux下小记

时间:2021-08-29 15:12:13

今天碰到一个问题 记录下

/usr/bin/ld: cannot find

ld 和ldconfig的区别

使用makefile编译的时候提示ld提示某个so找不到

当时使用ldconfig查了下 发现有这个库的连接信息

后来搜了下 才明白 ld是编译的连接器 非标准目录必须手动指定 ldconfig配置的是 则是可执行文件在运行是搜索so的路径

linux下升级glibc库

http://blog.csdn.net/officercat/article/details/39520227

ABI和API

api 是应用程序和操作系统之间的接口,凡是符合该api标准的应用程序都可以在支持该api的操作系统上编译通过。

abi 是二进制级别的接口,规定了二进制文件的格式、内容、装载/卸载程序的要求、函数调用时的参数传递

规则、寄存器、堆栈的使用。
如果操作系统都支持该api,但是机器的体系结构不同即他们的abi不同,那么在一个机器上生成的二进制代码是不可以在另外一台机器上面运行成功的,可能因为函数调用的参数传递规则不同或者其他由abi定义的行为产生的差异性。
其实关键的是abi定义了运行时的兼容性问题,这个问题是api无法解决的。api所能解决的是静态状态下的兼容性问题。

socket 发送 将应用程序的缓冲区完整的拷贝到内核发送缓冲区之后就会返回 因此并不保证对段收到消息

如果数据太大 内核缓冲区不足以装下所有数据 就会阻塞 直到所有完成拷贝。

如果设置了非缓冲的话 一旦缓冲区满就会立即返回并告知有多少数据被成功的拷贝

RST 客户端连接一个不存在的端口

客户端或者服务端异常终止socket 断电 断网