关于在ubuntu上编译依赖liblinear库的sceadan程序,失败时,如何排错?

事件的两个主角:

1、库:liblinear

2、程序:sceadan(依赖liblinear)

 

操作流程:

1、进入train.c和predict.c 所在文件夹  cd /home/ly/Downloads/liblinear-1.94    //文件夹中有Makefile,因此不需要./configure 

2、ly@master:/home/ly/Downloads/liblinear-1.94#make    //编译成功

3、ly@master:/home/ly/Downloads/liblinear-1.94#make install 
***没有规则可以创建目标 install。停止。//原因是Makefile中并没有写入install命令。intall实际上就是将可执行文件复制到/usr/local/bin,这种安排,个人感觉就是为了便于管理。详细关于如何安装源码程序的方法,参见鸟哥基础学习第三版P677

4、ly@master:/home/ly/Downloads/liblinear-1.94#./train  heart_scale  //执行成功,在liblinear-1.91文件中也可以注意到名称为train的可执行文件(可惜linux文件不能通过后缀知道某文件是否是可执行文件)

5、解压sceadan.v1.tar.bzip2.out:  tar -xvf sceadan.tar.bzip2.out(解压得到文件夹extracted pkg3,因为,cd命令似乎不支持包含空格命名的文件夹,于是将文件夹命名为extracted_pkg3)

6、root@master:/home/ly/Downloads/extracted_pkg3# make

rm sceadan *.o ucv* bcv* main* *~||:

rm:无法删除“sceadan”:没有那个文件或者目录

rm:无法删除“*.o”:没有那个文件或者目录

rm:无法删除“ucv*”:没有那个文件或者目录

rm:无法删除“bcv*”:没有那个文件或者目录

rm:无法删除“main*”:没有那个文件或者目录

rm:无法删除“*~”:没有那个文件或者目录

...

predict.c:8:20  致命错误:linear.h:没有发现那个文件或者目录

编译中断

make:***[sceadan]错误1

 

问题解决

1、查看liblinear的Makefile,发现有

lib:linear.o tron.o blas/blas.a

...

$(CXX) $${SHARED_LIB_FLAG} linear.o tron.o blas/blas.a -o liblinear.so.$(SHVER)  //将宏定义部分(含$的部分)根据Makefile的预定义替换掉,发现该语句的作用是生成动态库

但是,执行make指令后,文件夹中并没有生成任何.so文件(为什么没有生成,我也没明白),表明该语句没有执行。于是,在shell或者终端中,手动生成.so文件(操作方法就是,将宏定义替换后的g++生成.so文件在命令行中输入一次)。

2、回到extracted_pkg3文件夹中,执行make,发现报错”/usr/bin/ld:cannot find -linear“//表明,执行sceadan的makefile时,在/usr/bin期待找到liblinear的库,但没有找到。将liblinear.so.1拷贝到该文件夹中。再次执行,即可。

 

 一点个人想法

出了问题,解决办法就是见招拆招,各种鬼马的想法都可以试试。那些自以为一定正确的步骤,未必正确。

转载于:https://www.cnblogs.com/dream-of-snail/p/3793236.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值