目录
1 移植项目思考 19
1.1 软件程序商业过程 19
1.2 移植过程 20
1.2.1 调查 20
1.2.2 分析 21
1.2.3 移植 21
1.2.4 测试 22
1.2.5 支持 22
1.3 定义项目范围和目标 22
1.4 估计 24
1.4.1 技能水平和移植经验 24
1.4.2 编译器 25
1.4.3 第三方软件和中间件的可用性 25
1.4.4 编译环境和工具 25
1.4.5 平台依赖的结构 26
1.4.6 平台/硬件依赖的代码 26
1.4.7 搭建测试环境 26
1.4.8 用户接口需求 27
1.5 创建项目移植进度表 28
1.6 从商业角度看移植过程 28
1.7 带注解的技术调查问卷样例 29
1.7.1 平台相关的内容 29
1.7.2 应用程序相关的内容 29
1.7.3 数据库内容 31
1.7.4 项目移植时间进度内容 32
1.7.5 测试相关的内容 32
1.7.6 项目移植的执行内容 33
1.8 小结 33
2 调查 34
2.1 编译器 34
2.1.1 GNU gcc C编译器 34
2.1.2 GNU g++ (C++)编译器 35
2.1.3 GNU g77 FORTRAN编译器 36
2.1.4 GNU Java编译器(注释8) 37
2.1.5 GNU COBOL 37
2.1.6 其他编译器 37
2.2 Java环境 38
2.3 编译环境 38
2.3.1 gmake 38
2.3.2 GNU二进制工具(binutils) 39
2.3.2.1 GNU ld 39
2.3.3 GNU as 39
2.3.4 集成开发环境 41
2.4 Linux Shell 41
2.5 打包 42
2.5.1 用RPM打包应用程序 42
2.5.2 RPM的基本用法 43
2.5.2.1 rpm -i 43
2.5.2.2 rpm -e 43
2.5.2.3 rpm -U 44
2.5.2.4 rpm -q 44
2.5.2.5 rpm -V 44
2.5.3 LSB(Linux Standard Base)推荐的基准打包格式 44
2.6 项目管理任务 44
2.7 小结 46
3 分析 47
3.1 Linux标准 47
3.2 GNU libc库 48
3.2.1 glibc遵循的标准 49
3.3 GNU科学库 50
3.4 共享库 51
3.5 库版本化(注释8,9) 51
3.5.1 外部库版本化 51
3.5.2 符号版本化 53
3.6 动态链接器(运行时链接器) 56
3.6.1 编程接口 57
3.6.2 延迟重定位(Lazy Relocation) 57
3.6.3 初始化(initializing)和终止化(finalizing)函数 58
3.7 系统调用 58
3.8 大页面支持 59
3.9 Native POSIX线程库(Native POSIX Threads Library,简写作NPTL) 60
3.9.1 最大线程数 61
3.10 国际化(I18N)(注释18)和本地化 61
3.10.1 iconv支持 63
3.10.2 如何创建消息目录(message catalog)(注释19) 63
3.11 大小端(Big/Little-Endian,也叫字节序)环境 64
3.12 从32位移植到64位 65
3.12.1 常见的移植错误 66
3.12.2 最优方法 67
3.13 小结 67
4 移植Solaris应用程序 68
4.1 准备工作 68
4.1.1 搭建移植系统 68
4.1.2 搭建代码修改管理系统 69
4.1.3 搭建编译系统 69
4.2 常见的区别 69
4.2.1 C语言 70
4.2.2 C++语言 70
4.2.3 GNU C/C++语言 70
4.2.4 Java语言 71
4.2.5 线程 71
4.2.6 所支持的标准之间的比较 71
4.3 编译器 72
4.3.1 C编译器 72
4.3.2 C编译器选项 72
4.3.3 C++编译器选项 82
4.3.4 GNU g++的模板实例化 92
4.3.5 编译32位或64位目标文件 92
4.3.6 编译器的优化和性能选项 92
4.3.7 Linux平台上的命名空间选择 93
4.4 链接器 94
4.4.1 输出映射 99
4.4.2 链接器工具 99
4.4.3 共享库 100
4.4.4 库版本化 100
4.4.5 动态链接器(运行时链接器) 101
4.5 移植shell脚本到Linux 101
4.6 国际化和本地化 102
4.7 Make 102
4.7.1 为C++语言内建的Makefile变量 104
4.7.2 库依赖 104
4.7.3 空规则 104
4.7.4 当前目标 104
4.7.5 SCCS和RCS文件 105
4.7.6 有条件地给宏赋值 105
4.7.7 模式替换宏的引用 105
4.7.8 VPATH 105
4.7.9 命令执行 106
4.7.10 特殊目标 106
4.7.11 环境变量 107
4.7.12 退出状态 107
4.8 调试器 108
4.9 线程 108
4.9.1 Solaris libthread与Linux libpthread 108
4.9.2 Solaris libpthread与Linux libpthread 110
4.9.3 取消点(Cancellation Points) 113
4.9.4 C++异常和Linux线程 114
4.10 信号 115
4.10.1 信号动作(Actions) 116
4.10.2 简单信号 116
4.10.3 Linux的信号支持 117
4.10.4 POSIX信号捕获函数 119
4.10.5 信号集 120
4.10.6 信号信息 120
4.10.7 kill() 122
4.11 系统调用 122
4.11.1 open() 122
4.11.2 fcntl() 124
4.11.3 dirent 126
4.11.4 CPU亲和性(Affinity) 127
4.11.5 fork() 127
4.12 系统库 127
4.13 Solaris和Linux API 128
4.13.1 内存管理 128
4.13.2 进程间通信(Interprocess Communication, IPC) 129
4.13.3 内存布置优化(Memory Placement Optimization, 简写作MPO) 134
4.13.4 vfstab 134
4.13.5 posix_spawn()和posix_spwawnp() 134
4.13.6 plock() 135
4.13.7 waitpid() 135
4.14 科学库 136
4.15 大页面支持 136
4.16 Solaris上的一些不可移植的编程用法 137
4.17 小结 137
5 移植AIX应用程序 139
5.1 准本工作 139
5.1.1 搭建移植系统 139
5.1.2 搭建代码修改管理系统 140
5.1.3 搭建编译系统 140
5.2 常见的区别 140
5.2.1 C语言 141
5.2.2 C++语言 141
5.2.3 GNU C/C++语言 141
5.2.4 Java语言 141
5.2.5 线程 141
5.2.6 所支持的标准之间的比较 142
5.3 编译器 143
5.3.1 调用编译器 144
5.4 Make 153
5.4.1 gmake条件分支语句 154
5.5 链接器 154
5.5.1 链接器的不兼容性 154
5.5.2 链接器:从AIX移植到Linux参考手册 156
5.6 AIX和Linux创建共享库的比较 157
5.7 动态装载 157
5.8 AIX和Linux上模板实例化的区别 158
5.8.1 使用#pragma或#include 159
5.8.2 GNU中其他可用的模板选项 160
5.9 C++filt工具 160
5.10 系统API:AIX/Linux 161
5.10.1 AIX/Linux I/O系统API 161
5.11 部分AIX/Linux系统API之间的比较 167
5.11.1 getfsent(), getfsfile(), getfstype(), getfsspec() 167
5.11.2 ioctl() 168
5.11.3 read(),write() 169
5.11.4 confstr() 171
5.11.5 opendir() 171
5.11.6 readdir() 172
5.11.7 fcntl() 172
5.11.8 llseek(), lseek(), lseek64() 177
5.11.9 uname() 178
5.11.10 syslog(), closelog(), openlog() 179
5.11.11 swapoff(), swapon() 179
5.11.12 acct() 180
5.11.13 mmap(), mmap64()(注释17), munmap() 181
5.11.14 pread(),pwrite() 184
5.11.15 stat(), lstat(), fstat() 185
5.11.16 ptrace() 185
5.11.17 setgid(), setregid() 187
5.11.18 sync() 188
5.11.19 wait3(), wait4() 189
5.11.20 getcwd() 190
5.11.21 mount(), umount, vmount() 191
5.11.22 readv(), writev() 194
5.11.23 select() 195
5.11.24 reboot() 196
5.11.25 chroot() 198
5.11.26 fstatfs(),statfs() 199
5.11.27 poll() 200
5.11.28 quotactl() 201
5.12 AIX上的一些非标准的编程用法 204
5.13 信号 205
5.13.1 信号动作 205
5.13.2 简单信号 205
5.14 网络编程 210
5.15 进程间通信(Interprocess Communication,简写作IPC) 211
5.15.1 信号量 211
5.15.2 系统V信号量集 213
5.15.3 消息队列(mqueue.h) 213
5.15.4 共享内存 215
5.16 POSIX线程 217
5.16.1 Linux和AIX的线程模型比较 217
5.16.2 内核空间线程 217
5.16.3 用户空间线程 218
5.16.4 AIX和Linux POSIX线程交叉对比 218
5.17 大页面支持 221
5.18 通用API 221
5.19 小结 222
6 移植HP-UX应用程序 224
6.1 准备工作 224
6.1.1 搭建移植系统 224
6.1.2 搭建代码修改管理系统 225
6.1.3 搭建编译环境 225
6.2 常见的区别 225
6.2.1 C语言 226
6.2.2 C++语言 226
6.2.3 GNU C/C++语言 226
6.2.4 Java语言 226
6.2.5 线程 226
6.2.6 所支持标准之间的比较 227
6.3 编译器 228
6.3.1 C编译器选项 229
6.3.2 C++编译器选项 232
6.3.3 GNU g++的模板实例化 235
6.3.4 编译32/64位二进制程序 236
6.3.5 编译器优化和性能选项 236
6.3.6 使用GNU进行移植和编译 238
6.3.7 Linux平台上的命名空间选择 238
6.4 链接器(注释21) 239
6.4.1 输出映射(export map) 240
6.4.2 链接器工具 240
6.5 库版本化 241
6.5.1 HP-UX上的库版本化 241
6.5.2 Linux上的库版本化(注释24) 242
6.6 动态链接和共享库 242
6.6.1 GNU libtool 244
6.7 移植shell脚本到Linux 244
6.8 国际化(I18N)(注释26) 245
6.8.1 iconv支持和消息目录(message catalog) 247
6.9 软件开发工具 247
6.9.1 Makefile语法 248
6.9.2 调试器 250
6.10 线程 250
6.10.1 HP-UX和Linux上的线程支持 251
6.10.2 HP-UX DCE和POSIX线程的区别 254
6.10.3 调试Linux线程 256
6.10.4 C++异常和Linux线程 258
6.10.5 链接线程安全的库 260
6.11 信号 260
6.11.1 信号动作(Acitions) 260
6.11.2 简单信号 261
6.11.3 信号发送 262
6.11.4 Linux的信号支持 262
6.11.5 POSIX信号捕获函数 263
6.11.6 信号信息 263
6.11.7 信号缺省动作 265
6.12 HP-UX上的系统调用和Linux上的对应调用 267
6.12.1 检查POSIX API支持 267
6.12.2 检查Linux内核版本 271
6.13 系统库 272
6.14 GNU科学库 273
6.15 HP-UX和Linux API 274
6.15.1 glibc版本 274
6.15.2 glibc遵循的标准 274
6.15.3 HP-UX上的一些不可移植的编程用法 275
6.16 进程间通信 275
6.16.1 管道 275
6.16.2 FIFO 276
6.16.3 POSIX消息队列 276
6.16.4 POSIX信号量 277
6.16.5 POSIX共享内存 278
6.16.6 系统V共享内存 278
6.16.7 系统V消息 279
6.16.8 系统V信号量 279
6.17 小结 280
7 测试和调试 281
7.1 使用GNU调试器 282
7.1.1 编译可以使用GDB的程序 282
7.1.2 调用GDB 282
7.1.3 GDB基本命令 283
7.1.4 调试多进程 283
7.1.5 调试多线程应用程序 284
7.1.6 停止多线程程序 285
7.1.7 GDB初始化文件 286
7.1.8 GDB和信号 286
7.1.9 GDB的图形化前端(front end) 288
7.2 strace和ltrace 288
7.3 cscope工具 288
7.3.1 Vim和cscope 289
7.4 glibc调试支持 290
7.5 内存调试工具 291
7.5.1 Electric Fence 291
7.5.2 GNU/Linux mtrace, mcheck, MALLOC_CHECK 292
7.5.3 Mpatrol 292
7.5.4 dmalloc 292
7.5.5 valgrind 293
7.5.6 Rational Purefy 293
7.5.7 Insure++ 294
7.6 静态程序检查器 294
7.6.1 Splint 294
7.6.2 CodeSonar 294
7.7 线程跟踪工具 295
7.8 性能监测工具 295
7.8.1 内部视角 295
7.8.2 外部视角 299
7.8.3 其他工具 302
7.9 小结 303
F.3 编译和链接 414
《表F-3》670 控制和优化栈增长的编译器选项 415
F.3.2 汇编代码 415
F.3.3 栈框架结构和链接 415
F.3.4 预先定义的符号 416
F.3.5 调试 416
F.4 字节序 416
F.5 其他区别 416
F.5.1 ASCII和EBCDIC问题 416
F.5.2 cpuinfo的格式 417
F.6 变参列表 417
F.7 从哪儿可以获取更多信息 417
F.8 致谢 417
G.1 打包任务 418
G.2 安装和升级任务 418
G.3 用户管理任务 420
G.4 网络管理和配置 420
G.5 NFS管理和配置 421
G.6 管理系统资源 422
G.7 磁盘和文件系统管理 422
G.8 交换分区管理 423
G.9 逻辑卷管理 423
G.10 常用的解决错误的方法 425
G.11 网络问题解决方法 427
G.12 配置文件及其他文件 427
G.13 可比较的命令 428
| 回书目 上一节 |
|
· SQL Server入门到精通.. · 交换技术配置手册技术.. · 超级网管员——网络应.. · 网络服务器配置与应用.. · Linux集群技术自测试题.. · JavaSript核心技术自测.. |
· ARP攻击与防范技术自测.. · 国庆挑战自己参加自测 .. · 《网管员必读—网络应.. · 历次技术自测 获奖网友.. · 51CTO国庆七天技术自测.. · 9.2.2 无线AP |
|
|||
| · 网管系统介绍 · 网络管理系统如何支撑I.. · CISSP认证成长之路 · 51CTO国庆充电专题之好.. · 网络技术经典基础教程 · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 · 充电计划之热门IT认证.. |
· 51CTO技术自测 挑战自.. · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 · 我是黑客我怕谁——讲.. · ARP攻击防范与解决方案 · Solaris 10 配置管理 · Solaris基础知识入门 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · C#技术开发指南 · Solaris 10 配置管理 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·体验Windows Server 2008.. ·将超星图书转成PDF文档 |
·使用 Office Communicati.. ·VMware Workstation 6.01.. |
| ·强烈质疑“步行1公里就能.. ·国庆期间新闻回顾:微软.. |
·9月第3周回顾:微软和英.. ·9月第2周回顾:四核之战.. |
| · 华为、贝恩资本22亿美元.. · NGN:下一代网络 · 网络访问中断大排查 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· Google推出唯一硬件——.. · 硬盘之父获得诺贝尔物理.. · 理性面对四核服务器选购 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 硬盘之父获得诺贝尔物理.. · 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. |