gcc编译mex源文件遇到问题的解决

Two bag-of-words classifiers中下载了Feifei Li官网上的BOW 的Matlab代码,在Matlab 2010a中运行,linux发行版是ubuntu 10.0.4,gcc版本是4.4.3。

运行的过程中,遇到下面这样的问题:

??? Invalid MEX-file '/home/cerus/mydoc/myworkload/Bag_Words/common/vgg_nearest_neighbour.mexglx':
/home/cerus/mydoc/myworkload/Bag_Words/common/vgg_nearest_neighbour.mexglx: symbol mxGetNumberOfDimensions, version libmx.INTERNAL not defined in file
libmx.so with link time reference.

Error in ==> gg_lola_km_binary at 193
[tmpind, d2] = vgg_nearest_neighbour(ftsout(1:2,:), fts(1:2,:));

Error in ==> SIFT at 65
    [sift_descriptors, ftsout, angle, ind, out_imname] = gg_lola_km_binary(im, fts, scale' , 'sift', Verbose , Par);

Error in ==> do_representation at 39
    SIFT(img_file_names,ip_file_names,Descriptor);

Error in ==> do_all at 46
    do_representation(config_file);


然后,我搜索到的原因是Matlab的版本不对,因为其中的vgg_nearest_neighbour.mexglx是在旧版本的Matlab中编译和运行的,因此,重新在当前版本下编译源cpp文件生成新的mexglx文件即可解决问题。我选用的编译器是gcc,其实,也没得选择,但是会遇到

gcc版本和Matlab版本不匹配的问题,错误提示中显示支持Matlab 2010a的mex编译的gcc版本是4.2.3。上面说了,我当前的gcc版本又新了,因此只好下载安装gcc-4.2.3,可以参考os.51cto.com/art/200912/168804.htm

安装好之后就可以进行重新编译了,但是编译器的选择依然是个问题,我所知的有两种方式:

  • 修改mexopts.sh文件参考):

修改${path_of_matlab}/bin/mexopts.sh中所有的 CC=gcc423,CXX=g++423,这里gcc423和g++423都是指向4.2.3版本gcc中gcc和g++的link文件。


  • 修改命令行的设置参考

mex CC=gcc423 CXX=g++423 LD=g++423 -lm -o vgg_nearest_neighbour vgg_nearest_neighbour.cxx 。


==================================

另外,运行的过程中还曾遇到这样的问题,即,缺少库文件,libpng.so.2 , libstdc++-libc6.2-2.so.3, libstdc++.so.5。解决的方法当然是安装包含库文件的包。但是未必有这样的debian包,事实上就是没有,它们本身也不是包,因此 sudo apt-get install *自然就不行。

我的方法是,google{ key:libpng.so.2},搜到的RPM resource连接中,就是要找的包了,当然,选择合适的下载下来,

转换成debian包:

sudo alien -d ***.rpm 

查看包内容:

dpkg -c ***.deb

解压包内容:

dpkg -x ***.deb ./


我经验是,缺少什么库,把它copy到/usr/lib中可以了,否则,直接安装包含相应库的包也可以,

sudo dpkg -i ***.deb

唯一的问题是,对于上面我遇到缺少的库文件的后两者,其实是包含在libstdc++不同版本中的库,也就是说,没有办法通过安装一个版本的libstdc++来同时拥有这两个库,因此,只好把其中的一个库从包中直接copy到/usr/lib中了。结果是也可以。


我算是初学者,但是我希望这样的总结可以对遇到类似问题的人有帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值