C语言如何更换头部包含

2013-09-20 18:45:06 +08:00
 nazor
一个程序,头部引用的库全是linux下的,请问如何更换为win下的库文件?
以下是linux下的:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/udp.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <sys/socket.h>
#include <syslog.h>
#include <netinet/in.h>
#include <stdio.h>
1103 次点击
所在节点    C
5 条回复
luikore
2013-09-20 19:38:14 +08:00
这是移植问题, 很难

sys/socket 和 net 系列可以换成 winsocks, ws2tcpip 和 iphlpapi, 但是不少 api 都不同
unistd 可以找个替代的

其他你就得自己弄明白都是干什么的, 一个个换替代品了... 可以参考一些跨平台语言的处理, 例如 https://github.com/ruby/ruby/blob/trunk/win32/win32.c

另外一个简单很多的方法是在 cygwin 编译, 什么都不用做, 最后多打包一个 cygwin.dll 就可以了
cctvsmg
2013-09-20 20:16:37 +08:00
一般都是在定义的时候
#if defined( __WIN32__ ) || defined( WIN32 ) || defined( _WIN32 )
......
#enif

头部定义是这么定义
后面具体涉及到跨平台的一些操作
也分win32 linux mac几种定义
LazyZhu
2013-09-20 20:19:31 +08:00
我同意楼上的,还是用 Cygwin 编译吧,虽然中间多了一层,性能没MinG高,但确实简单。
leavic
2013-09-20 21:03:05 +08:00
其实C还好吧,各平台下的C库基本都还差不多,不像高级语言那样可能Windows平台有的库在Linux根本不存在,需要自己实现的。
方法基本就是楼上几位所说的了,如果一开始就要做跨平台的,初期架构就要考虑到这些东西,宏定义是必须的,你看看ecos的宏定义多得,都必须再单独做一个工具来管理了。
standin000
2013-09-21 23:16:45 +08:00
Makefile也得改。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/83113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX