当前位置: 技术问答>linux和unix
QT查看.so文件链接
来源: 互联网 发布时间:2016-01-23
本文导语: 各位大虾,有谁知道怎么查看第三方给的动态库(libcontrolcan.so)链接到我的库里面了呢?现在我遇到一个问题: 第三方给了我一个动态链接库libcontrolcan.so和一个头文件controlcan.h头文件里面有#define VCI_...
各位大虾,有谁知道怎么查看第三方给的动态库(libcontrolcan.so)链接到我的库里面了呢?现在我遇到一个问题:
第三方给了我一个动态链接库libcontrolcan.so和一个头文件controlcan.h头文件里面有#define VCI_5110 7和函数void DeviceClose()我具体步骤是这样的:
1、把这两个文件在root权限下都拷贝到/lib下
2、运行/sbin/ldconfig /lib
然后我在QT的主函数main()里面增加了定义#include
然后调用头文件里面的变量,这时可以调用得到,但是如果我调用里面的函数却提示:没有定义;
比如我调用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编程,
第三方给了我一个动态链接库libcontrolcan.so和一个头文件controlcan.h头文件里面有#define VCI_5110 7和函数void DeviceClose()我具体步骤是这样的:
1、把这两个文件在root权限下都拷贝到/lib下
2、运行/sbin/ldconfig /lib
然后我在QT的主函数main()里面增加了定义#include
然后调用头文件里面的变量,这时可以调用得到,但是如果我调用里面的函数却提示:没有定义;
比如我调用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
前者是符号声明找不到,错误信息是:
error: `xxx' undeclared
后者是符号代码找不到,错误信息是:
undefined reference to xxxxxx
你需要在编译时指定库,比如你的库名字是libabc.so,需要这样:
gcc ..... -labc
-l后面无需lib,只需abc