linux和unix下的socket编程

本文记录了在从Windows平台向Solaris平台移植软件时遇到的编译错误问题及解决方案。作者分享了一段用于测试的网络编程代码,在CentOS上能正常编译运行,但在Solaris上却因缺少动态链接库而失败。最终发现需要加入-lnsl和-lsocket参数才能成功链接到必要的网络库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               ================================20180410====================================

                今天在跨平台移植原来windows平台的软件到solaris时候,编译出现如下错误:

                

                写了个测试代码如下: 

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
int main(int argc, char *argv[])
{
struct in_addr addr1,addr2;
ulong l1,l2;
l1= inet_addr("192.168.0.74");
l2 = inet_addr("211.100.21.179");
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
printf("%s \n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr2));
return 0;
}

         上述代码在centos系统上直接g++编译就能正常通过,并且运行无误,但是在solaris系统上编译的时候却总是在链接的时候找不到对应函数的实现,可以明确的是这两个都在arpa/inet.h中进行了定义。折腾了两个小时之后(去查找为什么之前的在solaris上的程序能够正常编译通过),终于在如下的博客中找到了正解。unix中应该是将这些实现以动态库so文件的形式存在,所以编译的时候需要加入动态链接库,此例中需要加入的是-lnsl,类似进行socket编程的话要加入-lsocket进行动态库的连接

                后面可以仔细研究一下unix下和linux下socket编程具体的一个差异。

https://blog.youkuaiyun.com/dgyanyong/article/details/495792

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值