apue学习第二天(2)——第一个程序myls的执行

经历了重装两次系统,修复引导之后,Ubuntu终于可以正常工作了。中文输入法的ibus和fcitx框架很坑爹,刚开始ibus下的googlepinyin装好了,无奈sublime text中只支持fcitx框架的中文输入,于是试图改成fcitx下的pinyin,无果,最终两个都无法输入中文,没时间了,留待晚上解决,先开始程序。

首先是对apue.3e的make问题,上次说过,make的时候出现cannot find -lbsd错误,但博文(http://blog.csdn.net/jasonque/article/details/8933194)中有一些小错误,正确的命令应该是,

$sudo apt-get install libbsd-dev

具体可参考:http://www.cnblogs.com/cassvin/archive/2011/07/24/linux_qtopia_2.html。

make通过,接下来,就是apue.3e书中图1-3的代码了。先看一遍,目的是ls,即把某个文件夹下的所有文件列出来。sublime text输入之,注意#include ".../apue.h"这里要修改(不修改也行,下一篇会详细说)。

gcc 1_3.c,出错,错误如下:

# gcc 1_3.c
/tmp/cchudidN.o: In function `main':
1_3.c:(.text+0x20): undefined reference to `err_quit'
1_3.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld returned 1 exit status

这是什么问题? 自编的两个函数出错。查了一下,解答如下:

make will compile all the programs in all the chapters. But the important thing is that before that, it will make the library that will contain the implementations of the functions in apue.h.(http://unix.stackexchange.com/questions/105483/compiling-code-from-apue)

好吧,其实我也不知道为什么会这样(详见下节),但他提供了一种解决办法:

To compile an example program that you write from the book, run this GCC command (assuming your program's name is myls.c which is the first in the book):

gcc -o myls myls.c -I SCADDRESS/include/ -L SCADDRESS/lib/ -lapue
-I(是i)告诉gcc include路径在哪里,-L告诉gcc library库的路径,-lapue说要在lib中找include下apue文件对应的libapue.a或者libapue.so,就是找到底在哪里编译过apue.h中的函数。

好吧,其实我自己到这里还没搞懂,晚上十点半了,该回去了,明天再来。

其中,gcc具体步骤包括预处理(preprocessing)、编译(compilation)、汇编(assemble)、链接(linking),分别生成不同后缀的文件,具体见“linux gcc常用命令”:http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html

那么最后,当然是输入:$./1_3 /dev

这样,就把/dev下所有的文件都列出来了。顺便提一下,关于int main(int argc, char *argv[])中的参数,再回顾一遍。

参数目的就是为了把argument counter和argument vector送给函数处理,argc是命令中所有字符串数目,argv是由这些字符串组成的数组。比如$cat file,这个命令目的是为了输出file的内容,其中argc=2,argv[0]="cat", argv[1]="file"。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值