编译apue.3e缺少依赖库-lbsd

来源:互联网 发布:手机淘宝如何修改差评 编辑:程序博客网 时间:2024/06/10 14:00

出现错误如下:

making threadsmake[1]: Entering directory `/home/hhc/sharefile/apue.3e/threads'gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE  badexit2.c -o badexit2  -L../lib -lapue -pthread -lrt -lbsd/usr/bin/ld: cannot find -lbsdcollect2: error: ld returned 1 exit statusmake[1]: *** [badexit2] Error 1make[1]: Leaving directory `/home/hhc/sharefile/apue.3e/threads'make: *** [all] Error 1
那么,马上可以知道缺少-lbsd库,而且我的平台是ubantu 14.0.4 LTS

hhc@my:apue.3e$ sudo apt-get install libbslibbs2b0                libbsd-dev              libbse-devlibbs2b-dev             libbsd-resource-perl    libbsf-javalibbsd0                 libbse-0.7-4            libbsf-java-doclibbsd0-dbg             libbsearch-ruby         libbsh-javalibbsd-arc4random-perl  libbsearch-ruby1.8      hhc@my:apue.3e$ sudo apt-get install libbsdlibbsd0                 libbsd-arc4random-perl  libbsd-resource-perllibbsd0-dbg             libbsd-dev              hhc@my:apue.3e$ sudo apt-get install libbsd-dev 
好了,现在已经成功安装了-lbsd库了,再次make。果断通过。


学习经验:这是学习了2个月linux后发现使用过程中的经验积累,这个依赖库问题,没有google和stackflow,完全是自己包办

所以,其实这些错误信息,很好地指导了我们进一步学习或者是修改(改善)错误。


继续深思,发现,linux开发(移植工具等)经常会出现依赖库问题:

点击链接 关于usr/bin/ld: cannot find -lxxx问题总结


是时候随意运行一个它提供的(也就是书本上的)程序

hhc@my:apue.3e$  ./threads/cleanupcleanup    cleanup.c  hhc@my:apue.3e$  ./threads/cleanupthread 1 startthread 1 push completethread 1 exit code 1thread 2 startthread 2 push completecleanup: thread 2 second handlercleanup: thread 2 first handlerthread 2 exit code 2

下面是终端操作过程:

使用apue非常简单,直接导入头文件,交代lib库即可。

hhc@my:testfile$ touch test.chhc@my:testfile$ lstest.chhc@my:testfile$ vim test.c hhc@my:testfile$ gcc -I /home/hhc/sharefile/apue.3e/include/ -L /home/hhc/sharefile/apue.3e/lib/ test.c -o test -lapuehhc@my:testfile$ ./test hello

然后,我的测试程序是:

 #include <stdio.h>                                                            1 #include "apue.h"  2   3 void main()  4 {  5     err_msg("hello");  6 }
该程序正是使用了apue/lib/libapue.a静态库,简单调动错误信息函数。


使用了几个函数后,发现,需要适当添加-g,毕竟要调试程序和进一步理解程序的运行情况,了解堆栈信息等等,

所以,make clean后对Make.defines.linux的CFLAGS添加-g参数,也可以通过make选项添加。

实力测试后

Reading symbols from ./threads/cleanup...done.(gdb) l36}3738int39main(void)40{41interr;42pthread_ttid1, tid2;43void*tret;4445err = pthread_create(&tid1, NULL, thr_fn1, (void *)1);(gdb) l46if (err != 0)47err_exit(err, "can't create thread 1");48err = pthread_create(&tid2, NULL, thr_fn2, (void *)1);

0 0