testDLL.dll为自定义的dll文件,将其复制到程序的输凳橡出目录下就可以调用。
#include <QApplication>
#include <QLibrary>
#include <QDebug>
#include <QMessageBox>
typedef int (*Fun)(int,int)//定义函数指针,以备调用
int main(int argc,char **argv)
{
QApplication app(argc,argv)
QLibrary mylib("testDLL.dll") //声明所用到的枣搭旁dll文件
int result
if (mylib.load()) //判断是否正确加载
{
QMessageBox::information(NULL,"OK","DLL load is OK!")
Fun open=(Fun)mylib.resolve("add") //援引 add() 函数
if (open) //是否成功连接上 add() 函数
{
QMessageBox::information(NULL,"OK","Link to Function is OK!")
result=open(5,6) //这里函数指针调用dll中的 add() 函数
qDebug()<<result
}
else
QMessageBox::information(NULL,"NO","Linke to Function is not OK!!!!")
}
else
{
QMessageBox::information(NULL,"NO","DLL is not loaded!")
return 0 //加载失败枝扒则退出
}
}
64位可以编32位的程序出来,在各种FLAGS中增加 -m32 编出来的就是32位程序,连接时兄宏自然是找32位的共享库这个要看发行版对32位支持的实现,比如gentoo下如果开abi支持双架构那很可能悲剧,因为有些包还没跟上,如果用binary的32位库又会因为版本不同出现莫名其妙的问题,比如fontconfig的坑。
我在64位编32位程序都是使用chroot的方法,这样就可以把32位的头文件库什么的全放在某个地方。我用的仿尘山是ubuntu,32位库和64位库位置不一样,一般可以直接安装32位的库,如果遇到某些比较特殊的库,一般都可以通过重新编译增加rpath解决,如果没源码也可以用patchelf直接给elf上rpath。
如果您认可我的答案,请采纳。
您的采纳,是我答题的动力,O(∩_∩)O谢谢!!备中
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)