Linux系统编程手册 错误 undefined reference to `usageErr‘ errExit errExit getLong cmdLineErr collect2: erro
/tmp/ccJxsZJ1.o: In function `main':
seek_io.c:(.text+0x4a): undefined reference to `usageErr'
seek_io.c:(.text+0x86): undefined reference to `errExit'
seek_io.c:(.text+0x11d): undefined reference to `getLong'
seek_io.c:(.text+0x149): undefined reference to `errExit'
seek_io.c:(.text+0x17a): undefined reference to `errExit'
seek_io.c:(.text+0x31a): undefined reference to `errExit'
seek_io.c:(.text+0x391): undefined reference to `getLong'
seek_io.c:(.text+0x3c2): undefined reference to `errExit'
seek_io.c:(.text+0x41a): undefined reference to `cmdLineErr'
collect2: error: ld returned 1 exit status
其中ename.c.inc文件定义了一个字符串数组,用于对应错误码的名称
error_functions.h文件声明了本书自定义的错误处理函数
get_num.h文件声明了本书自定义的数值提取函数
tlpi_hdr.h文件则包含了后续需用到的系统调用头文件
由于存在3个头文件以及2个实现,每次编译时必须对实现也进行编译,为方便后续学习,采用将头文件复制到默认的编译器寻找目录下,并将实现打包成静态库,然后使用别名来默认链接静态库
第一步:下载本书所给的源码文件
wget "http://man7.org/tlpi/code/download/tlpi-161214-dist.tar.gz"
或者点此下载
第二步:解压后,make编译
tar -zxvf tlpi-161214-dist.tar.gz
cd tlpi-dist/
make -j
第三步:拷贝头文件至系统目录
cd lib/
sudo cp tlpi_hdr.h /usr/local/include/
sudo cp get_num.h /usr/local/include/
sudo cp error_functions.h /usr/local/include/
sudo cp ename.c.inc /usr/local/include/
第四步:制作静态库文件
g++ -c get_num.c error_functions.c
ar -crv libtlpi.a get_num.o error_functions.o
sudo cp libtlpi.a /usr/local/lib
第五步:简化编译命令
alias gl++='new() { g++ $1 -ltlpi;}; new'
第五步需要在当前用户的主目录下的.bashrc文件中设置别名,由于alias不支持参数,因此需要使用函数来间接实现,并且接受一个参数$1以指定对某个源文件进行编译并链接之前的静态库libtlpi.a。配置完毕后重新读入.bashrc文件以生效。这里使用函数来接受一个参数存在一个缺点即只能使用一个命令行参数,多余参数将被忽略。
完成上面的步骤后,即可使用快捷命令来编译我们的程序了:
gl++ xxx.c
该命令将编译生成a.out文件
相关文章
- 探索Linux系统中的点命令(linux点命令)
- 深入研究Linux系统调用函数(linux系统调用函数)
- 探索Linux系统的所有端口(查看linux所有端口)
- 深入浅出:Linux环境搭建入门指南(linux环境搭建教程)
- Linux命令指南:掌握最新的技能(linux所有命令大全)
- 立即响应:Linux热插拔事件处理机制(linux热插拔事件)
- 调整Linux系统磁盘使用率的方法(磁盘使用率linux)
- 使用Linux中的终端(linux中的..)
- Linux查看系统补丁:解决安全问题(linux查看系统补丁)
- 学习 Linux:如何修改系统时间(linux修改时间命令)
- 如何在Linux系统中撤销删除权限(linux删除权限)
- 系统的发展Linux系统:不断前行的步伐(目前linux)
- Linux环境下的数据库备份最佳实践(linux数据库备份)
- 文本Linux系统中文本文件的编辑技巧(linux系统怎么编辑)
- 一步搞定!简易USB安装Linux系统教程(usb安装linux系统)
- 信息Linux系统查看网络端口完全指南(linux系统查看端口)
- Linux磁盘分区操作指南(磁盘分区linux)
- Linux 命令实例精选:掌握技能的利器 (linux命令实例大全)
- 如何在Linux系统下访问局域网?(linux访问局域网)
- 学习Linux运算符:=用法详解(linux运算符)
- 比较Linux系统与Windows系统的异同(linux系统和windows系统的区别)