qt 调用.so库的问题

suixinpiaodang 2013-06-14 03:18:36
qt感觉好蛋疼,我把.so,调用QLibrary::load()、QLibrary::isLoaded(),都没问题,但是我调用QLibrary::resolve(),时就返回false。
我的代码是:
QLibrary *crypto_lib = NULL;
//加载动态库
//注意库要给路径否则加载不成功,libhello.so放在当前工程的目录下,所以路径为./
crypto_lib = new QLibrary("Aes_Crypto");
crypto_lib->load();
crypto_lib->isLibrary(QString("Aes_Crypto"));
qDebug()<<"the value of crypto_lib->isLibrary"<<crypto_lib->isLibrary;
qDebug()<<"the value of crypto_lib->isLoaded() is:"<< crypto_lib->isLoaded();
if (crypto_lib->isLoaded())
{
qDebug()<<"Succeed";
typedef int (*Fun)(int,char *,char *,char *);//定义函数指针
Fun test = (Fun)crypto_lib->resolve("Aes_Crypto");

我想调用的库中的函数原型是。
int Aes_Crypto(int argc,char *L_Src,char *L_TargetEnc,char *L_TargetDec)


看了好几天了,但不知道什么原因,求指导啊。
...全文
863 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2013-06-16
  • 打赏
  • 举报
回复
哪那么复杂!如果需要用QLibrary的方法,很简单: int (*JT_CloseReader)(); JT_CloseReader=QLibrary::resolve( libFilePath, "JT_CloseReader"); 就这么简单
u010497070 2013-06-15
  • 打赏
  • 举报
回复
引用 8 楼 dbzhang800 的回复:
用 nm -D t.so 或 readelf -Ws t.so 看看符号是不是被导出了 --- 题外:为什么不直接链接这个库,而是使用这种显式调用呢
大神。你有没有做过开发板链接mysql 的项目啊
  • 打赏
  • 举报
回复
引用 12 楼 suixinpiaodang 的回复:
引用 11 楼 heksn 的回复:
你的库函数有没有导出呢?
,库函数导出?请问这怎么导呢?我直接调用库里面的函数是没问题的。就是那个reslove返回值you问题。
导出的函数前面需要加__declspec(dllexport)
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
引用 11 楼 heksn 的回复:
你的库函数有没有导出呢?
,库函数导出?请问这怎么导呢?我直接调用库里面的函数是没问题的。就是那个reslove返回值you问题。
  • 打赏
  • 举报
回复
你的库函数有没有导出呢?
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
我直接调用库中的函数,竟然可以用。。还是不明白为什么slove调用返回false。
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
引用 8 楼 dbzhang800 的回复:
用 nm -D t.so 或 readelf -Ws t.so 看看符号是不是被导出了 --- 题外:为什么不直接链接这个库,而是使用这种显式调用呢
,第一次用Qt,不怎么熟啊。请问一下,我的库用g++还是用gcc,编译好呢?
dbzhang800 2013-06-14
  • 打赏
  • 举报
回复
用 nm -D t.so 或 readelf -Ws t.so 看看符号是不是被导出了 --- 题外:为什么不直接链接这个库,而是使用这种显式调用呢
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
引用 4 楼 dbzhang800 的回复:
你这个so是C的库还是C++的库?
,请问这是不是要加extern C之类的,我也加了,但不知道格式是否正确。
#include <QtGui>
#include<QLibrary>
#include "listwidget.h"
#include "newfolderdialog.h"
#include"loadlib.h"

extern "C"
{
    #include"loadlib.h"

}
,我的loadlib.h中的代码是:
#ifndef LOADLIB_H
#define LOADLIB_H
/***********************
 *定义引入加密库的头文件
 */

 int Aes_Crypto(int argc,char *L_Src,char *L_TargetEnc,char *L_TargetDec);//
 int AesEncryptFile (char *szSrc,char *szTarget ,unsigned char *key,int iType);//
 int AesDecryptFile (char * szSrc, char * szTarget ,unsigned char * key,int iType);//

#endif // LOADLIB_H
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
我把reslove()的返回值,打印出来、一直是0x0.是什么原因啊?
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
我用g++编译过一次,用gcc编译过一次。用C语言写的
dbzhang800 2013-06-14
  • 打赏
  • 举报
回复
你这个so是C的库还是C++的库?
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
自顶一下。。
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
求帮助啊,蛋疼死了。。
suixinpiaodang 2013-06-14
  • 打赏
  • 举报
回复
                if(test)
                      {
                         //Aes_Crypto();
                           qDebug() << "To test is"<<test;

                     }
                      else qDebug() << "To test is Failed"<<test;
        }
一直返回false啊。。 求帮助。。

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧