日期:2014-05-16  浏览次数:20747 次

QT查看.so文件链接
各位大虾,有谁知道怎么查看第三方给的动态库(libcontrolcan.so)链接到我的库里面了呢?现在我遇到一个问题:
                第三方给了我一个动态链接库libcontrolcan.so和一个头文件controlcan.h头文件里面有#define     VCI_5110       7和函数void   DeviceClose()我具体步骤是这样的:
                1、把这两个文件在root权限下都拷贝到/lib下
 
                2、运行/sbin/ldconfig   /lib
然后我在QT的主函数main()里面增加了定义#include       <controlcan.h>
然后调用头文件里面的变量,这时可以调用得到,但是如果我调用里面的函数却提示:没有定义;
   
比如我调用VCI_5110可以得到值为7   ,但是当我调用DeviceClose()却提示:没有定义函数DeviceClose()

由于libcontrolcan.so是用C语言写的,我在头文件controlcan.h里面用了extern   "C "{DeviceClose();   ....}我初步估计是我的动态库根本就没有连接到/lib里面。

各位大虾有知道是什么原因么?或者知道怎么看我的libcontrolcan.so是否连接到lib里面?在/lib目录下lincontrolcan.so.1是有绿色连接箭头,但是libcontrolcan.so没有链接箭头,如果没有连接上,用什么办法可以使它连接上?我用的是Fedra   core6里面的QT编程,

------解决方案--------------------
你看是编译错误还是链接错误?
前者是符号声明找不到,错误信息是:
error: `xxx ' undeclared

后者是符号代码找不到,错误信息是:
undefined reference to xxxxxx

你需要在编译时指定库,比如你的库名字是libabc.so,需要这样:
gcc ..... -labc
-l后面无需lib,只需abc