扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go学习
  • Go学院

    • Go小课
    • Go视界
    • Go小考
    • Go实战
  • Go资源

    • 优质课程
    • 在线宝典
    • 资源下载
    • 帮找资源
训练营 🔥
  • Go体系课&实战训练营
  • 升值加薪陪跑训练营
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
Go友会
  • 城市
  • 校园
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
实验区
  • Go周边
  • Go宝典

    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
更多
  • 用户中心

    • 我的信息
    • 我的返佣
    • 我的消息
  • 玩转星球

    • 星球介绍
    • 星主权益
    • 吐槽专区
    • 成长记录
  • 合作交流

    • 商务合作
    • 讲师招募
    • 生态伙伴
author-avatar

GOLANG ROADMAP


首页
Go学习
  • Go学院

    • Go小课
    • Go视界
    • Go小考
    • Go实战
  • Go资源

    • 优质课程
    • 在线宝典
    • 资源下载
    • 帮找资源
训练营 🔥
  • Go体系课&实战训练营
  • 升值加薪陪跑训练营
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
Go友会
  • 城市
  • 校园
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
实验区
  • Go周边
  • Go宝典

    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
更多
  • 用户中心

    • 我的信息
    • 我的返佣
    • 我的消息
  • 玩转星球

    • 星球介绍
    • 星主权益
    • 吐槽专区
    • 成长记录
  • 合作交流

    • 商务合作
    • 讲师招募
    • 生态伙伴
  • Linux运维系列

    • 《Linux》
  • Linux基础

    • 1.学会使用命令帮助
    • 1.文件及目录管理
    • 3.文本处理
    • 4.磁盘管理
    • 5.进程管理工具
    • 6.性能监控
    • 7.网络工具
    • 8.用户管理工具
    • 9.系统管理及IPC资源管理
  • Linux工具进阶

    • 1.程序构建
    • 2.程序调试
    • 3.性能优化
  • 工具参考

    • 1.gdb 调试利器
    • 2.ldd 查看程序依赖库
    • 3.lsof 一切皆文件
    • 4.ps 进程查看器
    • 5.pstack 跟踪进程栈
    • 6.strace 跟踪进程中的系统调用
    • 7.ipcs 查询进程间通信状态
    • 8.top linux下的任务管理器
    • 9.free 查询可用内存
    • 10.vmstat 监视内存使用情况
    • 11.iostat 监视I/O子系统
    • 12.sar 找出系统瓶颈的利器
    • 13.readelf elf文件格式分析
    • 14.objdump 二进制文件分析
    • 15.nm 目标文件格式分析
    • 16.size 查看程序内存映像大小
    • 17.wget 文件下载
    • 18.scp 跨机远程拷贝
    • 19.crontab 定时任务

扫码订阅《 》或入驻星球,即可阅读文章!

1.程序构建


GOLANG ROADMAP

一般源代码提供的程序安装需要通过配置、编译、安装三个步骤;

  • 配置做的工作主要是检查当前环境是否满足要安装软件的依赖关系,以及设置程序安装所需要的初始化信息,比如安装路径,需要安装哪些组件;配置完成,会生成makefile文件供第二步make使用;
  • 编译是对源文件进行编译链接生成可执行程序;
  • 安装做的工作就简单多了,就是将生成的可执行文件拷贝到配置时设置的初始路径下;

# 1.1. 配置

查询可用的配置选项:

./configure --help
1

配置路径:

./configure --prefix=/usr/local/snmp
1

–prefix是配置使用的最常用选项,设置程序安装的路径;

# 1.2. 编译

编译使用make编译:

make -f myMakefile
1

通过-f选项显示指定需要编译的makefile;如果待使用makefile文件在当前路径,且文件名为以下几个,则不用显示指定:

makefile Makefile

# makefile编写的要点

  • 必须满足第一条规则,满足后停止
  • 除第一条规则,其他无顺序

# makefile中的全局自变量

    • @目标文件名
  • @^所有前提名,除副本
  • @+所有前提名,含副本
  • @<一个前提名
  • @?所有新于目标文件的前提名
  • @*目标文件的基名称

# 更多选择 CMake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件。使用CMake,能够使程序员从复杂的编译连接过程中解脱出来。它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以生成标准的构建文件,如 Unix/Linux 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。

# 编译依赖的库

makefile编译过程中所依赖的非标准库和头文件路径需要显示指明:

CPPFLAGS -I标记非标准头文件存放路径
LDFLAGS  -L标记非标准库存放路径
1
2

如果CPPFLAGS和LDFLAGS已在用户环境变量中设置并且导出(使用export关键字),就不用再显示指定;

make -f myMakefile LDFLAGS='-L/var/xxx/lib -L/opt/mysql/lib'
    CPPFLAGS='-I/usr/local/libcom/include -I/usr/local/libpng/include'
1
2

警告

链接多库时,多个库之间如果有依赖,需要注意书写的顺序,右边是左边的前提;

# g++编译

g++ -o unixApp unixApp.o a.o b.o
1

选项说明:

  • -o:指明生成的目标文件
  • -g:添加调试信息
  • -E: 查看中间文件

应用:查询宏展开的中间文件:

在g++的编译选项中,添加 -E选项,然后去掉-o选项 ,重定向到一个文件中即可:

g++ -g -E unixApp.cpp  -I/opt/app/source > midfile
1

查询应用程序需要链接的库:

- ldd myprogrammer
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
    libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003995400000)
1
2
3
4
5
6

注解

关于ldd的使用细节,参见 ldd 查看程序依赖库

# 1.3. 安装

安装做的工作就简单多了,就是将生成的可执行文件拷贝到配置时设置的初始路径下:

- make install
1

其实 install 就是makefile中的一个规则,打开makefile文件后可以查看程序安装的所做的工作;

# 1.4. 总结

configure make install g++

  • 1.1. 配置
  • 1.2. 编译
  • makefile编写的要点
  • makefile中的全局自变量
  • 更多选择 CMake
  • 编译依赖的库
  • g++编译
  • 1.3. 安装
  • 1.4. 总结