在unix上写程序非常慢,也许是我对vi不熟悉吧。于是想,既然是纯c++程序,那么就用vc写好后再放到unix上去,应该也是可以的,于是开始:
一、首先在vc里开一个makefile工程。这时里面什么都没有。使用project->add to project把程序文件装进来。
二、设置创建选项。在project->setting里面,设置build command line,主要是填上自己的makefile文件名。这里有几个问题我搞不定。因为是默认是用nmake来管理,但是nmake的选项里好像没有用于指定目标的?为了方便我就把rebuild all options填了个clean,因为在我的makefile里clean用来清除目标文件。这样设置就使得点build时就按依赖规则编译,点rebuild时就把中间文件删掉然后从头编译,也算个是折中了吧。
三、cl的有用选项:
/I:头文件路径
/GX:允许c++异常
/GZ /ZI /Yd:允许调试信息 等于 g++ -g,不晓得这三个各有什么用,我都一起加上
/nologo:不要显示那么多版本信息,烦
/Fofilename:输出的.obj文件名
四、link的有用选项:
/DEBUG:允许调试
/LIBPATH:库文件路径
/OUT:FILENAME:输出文件名
要连接的其它库直接写在后面,不作为选项形式,使用winsock函数要连Ws2_32.lib
五、可以在cl的编译标志里加一个/DWIN,在程序里通过#ifdef WIN就知道是否在windows还是unix上运行,可以做一些不同的调用,比如,unix里网络头文件与windows不一样,还有,windows上使用网络函数要先调用一个WSAStartup。
几个不兼容问题:
1、unix上可以把socket用fdopen打开成FILE*一样的东西,然后使用fputs和fgets按行读取,比较方便,在windows上没这个功能,用fdopen去打开一个socket时出错
2、unix上填写sockaddr_in.sin_port时用htonl,而windows用htons,一字之差,调了我半小时。
3、unix上用select可以同时测试所有的文件描述符,包括标准输入和socket,windows上也不行,如果把stdin传到fd_set里面去,调用后面的函数时就会返回10038错误,意思是socket操作应用在非socket上。
faint!windows竟然有如此之多的限制,慢慢理解到跨平台的艰难。
1082

被折叠的 条评论
为什么被折叠?



