免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 127541 | 回复: 12
打印 上一主题 下一主题

unix环境高级编程和网络编程源代码能在mac下编译通过吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-09 18:46 |只看该作者 |倒序浏览
听说mac os基于unix,想买个mac pro学习unix下的编程,不知道能不能编译这两本书上的源代码还有能练习unix的shell程序设计吗

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2013-07-12 17:38 |只看该作者
可以过,但有些小修改,动手尝试下。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
3 [报告]
发表于 2013-07-12 17:57 |只看该作者
BTW, 买MacBook Pro可以学UNIX编程,学习娱乐两不误,但用Mac Pro有些杀鸡用牛刀的感觉。。。OS X自从10.5 Leopard就是获得认证的UNIX系统,遵循Single UNIX Specification,规范文档写的不错,可以当参考手册看。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-03 17:33:522015元宵节徽章
日期:2015-03-06 15:50:39IT运维版块每日发帖之星
日期:2016-01-11 06:20:00IT运维版块每日发帖之星
日期:2016-03-19 06:20:0019周年集字徽章-19
日期:2019-09-06 18:56:11
4 [报告]
发表于 2013-09-09 18:36 |只看该作者
当然没问题,不过首先要在你的MAC系统安装XCODE然后在扩展插件里安装GCC,目前版本已经淘汰了gcc编译器采用了更好的编译器。

论坛徽章:
1
综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00
5 [报告]
发表于 2013-10-04 15:26 |只看该作者
我表示怀疑, 作者写这书的时候,Mac还没出世。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-03 17:33:522015元宵节徽章
日期:2015-03-06 15:50:39IT运维版块每日发帖之星
日期:2016-01-11 06:20:00IT运维版块每日发帖之星
日期:2016-03-19 06:20:0019周年集字徽章-19
日期:2019-09-06 18:56:11
6 [报告]
发表于 2013-10-08 20:26 |只看该作者
如果我猜的没错,楼上朋友所指的Unix编程图书应该是W.Richard Stevens写的UNIX环境编程,这本书最初创作于1996-1999年间,作者网站(http://www.kohala.com/start/),与此同时苹果操作系统Mac OS 9已经发布,在苹果硬件方面已发布了Power Macintosh G4,而此时的苹果掌门人由乔布斯再次接管。

论坛徽章:
1
综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00
7 [报告]
发表于 2013-10-12 14:17 |只看该作者
本帖最后由 fly3ds 于 2013-10-12 14:20 编辑
cgweb 发表于 2013-10-08 20:26
如果我猜的没错,楼上朋友所指的Unix编程图书应该是W.Richard Stevens写的UNIX环境编程,这本书最初创作于1 ...


好吧,就算你说的对。但是这书里的程序能否在Mac OS上跑起来还是未知的,没听说过有谁把这书里的程序搞到Mac上去运行起来。

我估计,最起码,要做相当的修改才能跑起来那么一两个程序;可能改个几个程序之后,就没耐心了,一大堆系统调用、库函数、配置文件,鬼知道到底干什么用的,在Mac上有没有实现,或者有没有类似的实现。

各个Unix系统之间的差异其实还是挺大的。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-03 17:33:522015元宵节徽章
日期:2015-03-06 15:50:39IT运维版块每日发帖之星
日期:2016-01-11 06:20:00IT运维版块每日发帖之星
日期:2016-03-19 06:20:0019周年集字徽章-19
日期:2019-09-06 18:56:11
8 [报告]
发表于 2013-10-13 16:14 |只看该作者
你说的也对

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
9 [报告]
发表于 2014-01-24 18:18 |只看该作者
UNIX的具体实现差异大,但标准接口早就稳定很多年了,尤其是认证UNIX(如HP UX, IBM AIX, Oracle Solaris, Mac OS X 10.5+),必须实现POSIX.1-2001/SUS v3,而APUE的核心内容都在上述标准范围内。

APUE(UNIX环境高级编程)都有三个版本了,从官网下载2005年的第二版,书中覆盖了FreeBSD 5.2.1/Linux 2.4.22/Solaris 9/Mac OS X 10.3,比较古老了。下面我在2013年发布Mac OS X 10.9(gcc 4.2.1基于LLVM 3.3)上编译所有代码

1. 目录树顶层部分内容。
  1. bash-3.2 $ll | head -20
  2. total 1728
  3. drwxr-xr-x  248 Guorui  staff  8432  1 24 16:59 ./
  4. drwx------+  11 Guorui  staff   374  1 24 16:37 ../
  5. -r--r--r--    1 Guorui  staff   656  5 29  2005 DISCLAIMER
  6. -rw-r--r--    1 Guorui  staff   552  5 29  2005 Make.defines.freebsd
  7. -rw-r--r--    1 Guorui  staff   568  5 29  2005 Make.defines.linux
  8. -rw-r--r--    1 Guorui  staff   555  1 24 16:59 Make.defines.macos
  9. -rw-r--r--    1 Guorui  staff   550  5 29  2005 Make.defines.solaris
  10. -rw-r--r--    1 Guorui  staff   678  5 29  2005 Makefile
  11. -rw-r--r--    1 Guorui  staff  1511  5 30  2005 README
  12. drwxr-xr-x   11 Guorui  staff   374  5 28  2005 advio/
  13. drwxr-xr-x   14 Guorui  staff   476  5 29  2005 call/
  14. drwxr-xr-x   24 Guorui  staff   816  5 29  2005 calld/
  15. drwxr-xr-x   11 Guorui  staff   374  5 28  2005 daemons/
  16. drwxr-xr-x    7 Guorui  staff   238  5 28  2005 datafiles/
  17. drwxr-xr-x    9 Guorui  staff   306  5 28  2005 db/
  18. drwxr-xr-x   13 Guorui  staff   442  5 28  2005 environ/
  19. drwxr-xr-x   17 Guorui  staff   578  5 28  2005 exercises/
  20. lrwxr-xr-x    1 Guorui  staff    13  5 28  2005 fig1.10@ -> proc/shell2.c
  21. lrwxr-xr-x    1 Guorui  staff    10  5 28  2005 fig1.3@ -> file/ls1.c
复制代码
2. 编译过程。
1)首先读下README,然后进入 Make.defines.macos中修改当前源码所在目录,完毕。

2)输入“make macos”开始编译,警告很多,直到出现一个未定义符号的链接错误终止编译了:
  1. gcc -ansi -I/Users/Guorui/Downloads/apue.2e/include -Wall -DMACOS -DDEBUG -o call main.o call.o put.o take.o takeput.o escape.o loop.poll.o ../sockets/clconn.o  ../lib/libapue.a
  2. clang: warning: argument unused during compilation: '-ansi'
  3. Undefined symbols for architecture x86_64:
  4.   "_CMSG_LEN", referenced from:
  5.       _recv_fd in libapue.a(recvfd.o)
  6. ld: symbol(s) not found for architecture x86_64
  7. clang: error: linker command failed with exit code 1 (use -v to see invocation)
  8. make[1]: *** [call] Error 1
  9. make: *** [macos] Error 1
复制代码
3) 寻找和解决编译错误。发现宏'CMSG_LEN'未定义,因为OS X在x86-64架构下的兼容标准已经变为严格符合SUSv3了,
默认去掉了一些传统UNIX的扩展函数。不妨再加入那些扩展函数,于是在Make.defines.macos加入'-D_DARWIN_C_SOURCE'。
再次编译,依然很多警告,无视,幸好全部成功。

4) 随便找了一个例子运行,用系统调用生成空洞文件。
  1. bash-3.2 $l
  2. access*      changemod.c  fileflags.c  ftw4.c       linux.mk     macos.mk     solaris.mk   umask*       zap.c
  3. access.c     devrdev*     filetype*    hello*       longpath*    mycd*        testerror*   umask.c
  4. cdpwd*       devrdev.c    filetype.c   hello.c      longpath.c   mycd.c       testerror.c  unlink*
  5. cdpwd.c      file.hole    freebsd.mk   hole*        ls1*         seek*        uidgid*      unlink.c
  6. changemod*   fileflags*   ftw4*        hole.c       ls1.c        seek.c       uidgid.c     zap*
  7. bash-3.2 $./hole
  8. bash-3.2 $ll file.hole
  9. -rw-r--r--  1 Guorui  staff  16394  1 24 18:11 file.hole
复制代码
5. 总体来看只新增了一个宏就完成全部编译,没任何代码修改,没什么难度。至于研究具体的调用行为,则是看这本书的目的了,
而且SUSv3中的标准工具和接口行为正确性,OpenGroup认证UNIX时已经测试了,无需我们担心。

论坛徽章:
0
10 [报告]
发表于 2014-03-19 14:27 |只看该作者
楼上很牛逼   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP