Linux系统下Qt调用c++编译的库
Linxu系统下调用c语言编译的so文件流程比较简单,代码流程如下(不做介绍了,可以查看qt assistant)
#include "CallCppsoDialog.h"#include "ui_CallCppsoDialog.h"CallCppSoDialog::CallCppSoDialog(QWidget *parent) : QDialog(parent), ui(new Ui::CallCppSoDialog){ ui->setupUi(this); QLibrary myLib("libhellocpp.so"); ui->label->setText("bf myLib load"); if (myLib.load()) { ui->label->setText("myLib.load"); Hi* myHi; typedef Hi* (*MyPrototype)(); MyPrototype myFunction = (MyPrototype) myLib.resolve("createHi"); if (!myFunction) { qDebug("Null Hi"); return; } myHi = myFunction(); qDebug("--------%d---------", myHi->getInt()); char buffer[128] = {0}; myHi->getString(buffer); ui->label_2->setText(QString(buffer)); typedef void (*Fun)(Hi* p); Fun fun = (Fun)myLib.resolve("destroyHi"); if (fun) { fun(myHi); } myLib.unload(); }}CallCppSoDialog::~CallCppSoDialog(){ delete ui;}利用C++的多态 和 extern "C" 可以完美解决Qt在调用C++文件编译的so文件。项目中遇到过类似的东西,拿出来备忘和共享