linux和unix下的socket编程

版权声明:转载请注明出处 https://blog.csdn.net/weixin_39540568/article/details/87889845

               ================================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.csdn.net/dgyanyong/article/details/495792

猜你喜欢

转载自blog.csdn.net/weixin_39540568/article/details/87889845