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文件

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值