| ISBN | 出版时间 | 包装 | 开本 | 页数 | 字数 |
|---|---|---|---|---|---|
| 未知 | 暂无 | 暂无 | 未知 | 0 | 暂无 |
目录:
译者序
序言
致谢
关于作者
第1章 项目移植思考 1
1.1 软件程序商业过程 1
1.2 移植过程 2
1.2.1 调查 2
1.2.2 分析 3
1.2.3 移植 3
1.2.4 测试 4
1.2.5 支持 4
1.3 定义项目范围和目标 4
1.4 估计 5
1.4.1 技能水平和移植经验 6
1.4.2 编译器 6
1.4.3 第三方软件和中间件的可用性 6
1.4.4 编译环境和工具 7
1.4.5 平台依赖的结构 7
1.4.6 平台/硬件依赖的代码 7
1.4.7 搭建测试环境 8
1.4.8 用户接口需求 8
1.5 创建项目移植进度表 9
1.6 从商业角度看移植过程 10
1.7 带注解的技术调查问卷样例 10
1.7.1 平台相关的内容 10
1.7.2 应用程序相关的内容 11
1.7.3 数据库内容 13
1.7.4 项目移植时间进度内容 14
1.7.5 测试相关的内容 14
1.7.6 项目移植的执行内容 15
1.8 小结 15
第2章 调查 16
2.1 编译器 16
2.1.1 GNU gcc C编译器 16
2.1.2 GNU g++ (C++)编译器 17
2.1.3 GNU g77 FORTRAN编译器 18
2.1.4 GNU Java编译器 19
2.1.5 GNU COBOL 19
2.1.6 其他编译器 19
2.2 Java环境 19
2.3 编译环境 20
2.3.1 gmake 20
2.3.2 GNU二进制工具 20
2.3.3 GNU as 21
2.3.4 集成开发环境 23
2.4 Linux Shell 23
2.5 打包 23
2.5.1 用RPM打包应用程序 24
2.5.2 RPM的基本用法 24
2.5.3 LSB推荐的基准打包格式 25
2.6 项目管理任务 25
2.7 小结 26
第3章 分析 28
3.1 Linux标准 28
3.2 GNU libc库 29
3.3 GNU科学库 30
3.4 共享库 31
3.5 库版本化 32
3.5.1 外部库版本化 32
3.5.2 符号版本化 34
3.6 动态链接器(运行时链接器) 39
3.6.1 编程接口 40
3.6.2 延迟重定位 42
3.6.3 初始化和终止化函数 43
3.7 系统调用 43
3.8 大页面支持 43
3.9 Native POSIX线程库(NPTL) 48
3.10 国际化(I18N)和本地化 49
3.10.1 iconv支持 50
3.10.2 如何创建消息目录 53
3.11 大小端环境 54
3.12 从32位移植到64位 55
3.12.1 常见的移植错误 56
3.12.2 最优方法 57
3.13 小结 57
第4章 移植Solaris应用程序 59
4.1 准备工作 59
4.1.1 搭建移植系统 59
4.1.2 搭建代码修改管理系统 59
4.1.3 搭建编译系统 60
4.2 常见的区别 60
4.2.1 C语言 61
4.2.2 C++语言 61
4.2.3 GNU C/C++语言 61
4.2.4 Java语言 61
4.2.5 线程 61
4.2.6 所支持的标准之间的比较 61
4.3 编译器 62
4.3.1 C编译器 63
4.3.2 C编译器选项 63
4.3.3 C++编译器选项 69
4.3.4 GNU g++的模板实例化 76
4.3.5 编译32位或64位目标文件 77
4.3.6 编译器的优化和性能选项 78
4.3.7 Linux平台上的命名空间选择 78
4.4 链接器 79
4.4.1 输出映射 82
4.4.2 链接器工具 82
4.4.3 共享库 82
4.4.4 库版本化 83
4.4.5 动态链接器 83
4.5 移植shell脚本到Linux 83
4.6 国际化和本地化 84
4.7 Make 85
4.7.1 为C++语言内建的Makefile变量 86
4.7.2 库依赖 86
4.7.3 空规则 86
4.7.4 当前目标 86
4.7.5 SCCS和RCS文件 87
4.7.6 有条件地给宏赋值 87
4.7.7 模式替换宏的引用 87
4.7.8 VPATH 87
4.7.9 命令执行 88
4.7.10 特殊目标 88
4.7.11 环境变量 88
4.7.12 退出状态 89
4.8 调试器 89
4.9 线程 89
4.9.1 Solaris libthread与Linux libpthread 89
4.9.2 Solaris libpthread与Linux libpthread 91
4.9.3 取消点 94
4.9.4 C++异常和Linux线程 95
4.10 信号 98
4.10.1 信号动作 98
4.10.2 简单信号 99
4.10.3 Linux的信号支持 100
4.10.4 POSIX信号捕获函数 102
4.10.5 信号集 102
4.10.6 信号信息 103
4.10.7 kill() 104
4.11 系统调用 104
4.11.1 open() 104
4.11.2 fcntl() 105
4.11.3 dirent 107
4.11.4 CPU亲和性(Affinity) 108
4.11.5 fork() 108
4.12 系统库 108
4.13 Solaris和Linux API 108
4.13.1 内存管理 109
4.13.2 进程间通信(IPC) 109
4.13.3 内存布置优化(MPO) 114
4.13.4 vfstab 115
4.13.5 posix_spawn()和posix_
spwawnp() 115
4.13.6 plock() 115
4.13.7 waitpid() 115
4.14 科学库 116
4.15 大页面支持 117
4.16 Solaris上一些不可移植的编程用法 117
4.17 小结 117
第5章 移植AIX应用程序 119
5.1 准备工作 119
5.1.1 搭建移植系统 119
5.1.2 搭建代码修改管理系统 119
5.1.3 搭建编译系统 120
5.2 常见的区别 120
5.2.1 C语言 120
5.2.2 C++语言 121
5.2.3 GNU C/C++语言 121
5.2.4 Java语言 121
5.2.5 线程 121
5.2.6 所支持的标准之间的比较 121
5.3 编译器 122
5.4 Make 130
5.5 链接器 131
5.5.1 链接器的不兼容性 131
5.5.2 链接器:从AIX移植到Linux
参考手册 133
5.6 AIX和Linux创建共享库的比较 133
5.7 动态装载 134
5.8 AIX和Linux上模板实例化的区别 135
5.8.1 使用#pragma或#include 135
5.8.2 GNU中其他可用的模板选项 138
5.9 C++filt工具 138
5.10 系统API:AIX/Linux 139
5.11 部分AIX/Linux系统API之间的比较 143
5.11.1 getfsent()、 getfsfile()、getfstype()、getfsspec() 144
5.11.2 ioctl() 145
5.11.3 read()、write() 146
5.11.4 confstr() 148
5.11.5 opendir() 148
5.11.6 readdir() 149
5.11.7 fcntl() 149
5.11.8 llseek()、lseek()、lseek64() 153
5.11.9 uname() 154
5.11.10 syslog()、closelog()、openlog() 154
5.11.11 swapoff()、swapon() 155
5.11.12 acct() 156
5.11.13 mmap()、mmap64()、
munmap() 157
5.11.14 pread()、pwrite() 159
5.11.15 stat()、 lstat()、fstat() 160
5.11.16 ptrace() 161
5.11.17 setgid()、setregid() 163
5.11.18 sync() 163
5.11.19 wait3()、wait4() 164
5.11.20 getcwd() 165
5.11.21 mount()、umount()、vmount() 166
5.11.22 readv()、writev() 169
5.11.23 select() 170
5.11.24 reboot() 172
5.11.25 chroot() 173
5.11.26 fstatfs()、statfs() 174
5.11.27 poll() 176
5.11.28 quotactl() 177
5.12 AIX上的一些非标准的编程用法 179
5.13 信号 180
5.13.1 信号动作 180
5.13.2 简单信号 180
5.14 网络编程 185
5.15 进程间通信(IPC) 186
5.15.1 信号量 186
5.15.2 系统V信号量集 187
5.15.3 消息队列 188
5.15.4 共享内存 190
5.16 POSIX线程 191
5.16.1 Linux和AIX的线程模型比较 191
5.16.2 内核空间线程 192
5.16.3 用户空间线程 192
5.16.4 AIX和Linux POSIX线程
交叉对比 192
5.17 大页面支持 195
5.18 通用API 195
5.19 小结 195
第6章 移植HP-UX应用程序 198
6.1 准备工作 198
6.1.1 搭建移植系统 198
6.1.2 搭建代码修改管理系统 198
6.1.3 搭建编译环境 199
6.2 常见的区别 199
6.2.1 C语言 199
6.2.2 C++语言 200
6.2.3 GNU C/C++语言 200
6.2.4 Java语言 200
6.2.5 线程 200
6.2.6 所支持标准之间的比较 200
6.3 编译器 201
6.3.1 C编译器选项 202
6.3.2 C++编译器选项 205
6.3.3 GNU g++的模板实例化 208
6.3.4 编译32/64位二进制程序 210
6.3.5 编译器优化和性能选项 210
6.3.6 使用GNU进行移植和编译 211
6.3.7 Linux平台上的命名空间选择 212
6.4 链接器 213
6.4.1 输出映射 214
6.4.2 链接器工具 214
6.5 库版本化 214
6.5.1 HP-UX上的库版本化 214
6.5.2 Linux上的库版本化 215
6.6 动态链接和共享库 215
6.7 移植shell脚本到Linux 216
6.8 国际化(I18N) 217
6.9 软件开发工具 220
6.9.1 Makefile语法 221
6.9.2 调试器 222
6.10 线程 223
6.10.1 HP-UX和Linux上的线程支持 224
6.10.2 HP-UX DCE和POSIX线程的
区别 227
6.10.3 调试Linux线程 228
6.10.4 C++异常和Linux线程 233
6.10.5 链接线程安全的库 239
6.11 信号 239
6.11.1 信号动作 239
6.11.2 简单信号 240
6.11.3 信号发送 241
6.11.4 Linux的信号支持 242
6.11.5 POSIX信号捕获函数 242
6.11.6 信号信息 243
6.11.7 信号默认动作 245
6.12 HP-UX上的系统调用和Linux上的
对应调用 246
6.12.1 检查POSIX API支持 246
6.12.2 检查Linux内核版本 251
6.13 系统库 251
6.14 GNU科学库 252
6.15 HP-UX和Linux API 253
6.15.1 glibc版本 253
6.15.2 glibc遵循的标准 254
6.15.3 HP-UX上的一些不可移植的
编程用法 254
6.16 进程间通信 254
6.16.1 管道 255
6.16.2 FIFO 255
6.16.3 POSIX消息队列 255
6.16.4 POSIX信号量 256
6.16.5 POSIX共享内存 257
6.16.6 系统V共享内存 257
6.16.7 系统V消息 257
6.16.8 系统V信号量 258
6.17 小结 258
第7章 测试和调试 260
7.1 使用GNU调试器 260
7.1.1 编译可以使用GDB的程序 260
7.1.2 调用GDB 261
7.1.3 GDB基本命令 261
7.1.4 调试多进程 262
7.1.5 调试多线程应用程序 263
7.1.6 停止多线程程序 266
7.1.7 GDB初始化文件 267
7.1.8 GDB和信号 267
7.1.9 GDB的图形化前端 269
7.2 strace和ltrace 270
7.3 cscope工具 270
7.4 glibc调试支持 272
7.5 内存调试工具 274
7.5.1 Electric Fence 274
7.5.2 GNU/Linux mtrace、mcheck、MALLOC_CHECK 275
7.5.3 Mpatrol 276
7.5.4 dmalloc 277
7.5.5 valgrind 277
7.5.6 Rational Purify 278
7.5.7 Insure++ 278
7.6 静态程序检查器 279
7.6.1 Splint 279
7.6.2 CodeSonar 279
7.7 线程跟踪工具 279
7.8 性能监测工具 280
7.8.1 内部视角 280
7.8.2 外部视角 286
7.8.3 其他工具 290
7.9 小结 292
附录A Solaris到Linux参考表 293
附录B AIX到Linux参考表 319
附录C HP-UX到Linux参考表 334
附录D POWER上的Linux 384
附录E gprof helper 387
附录F IBM zSeries大型机相关的
移植问题 390
附录G Solaris到Linux移植:系统
管理员指南 397