环境:ubuntu18.04 64位

qt版本:qt5.12.0

编译工具:gcc

一、创建工程

工程目录结构如下

.
└── calc
    ├── calc.cpp
    ├── calc.h
    ├── calc.pro
    ├── calc.pro.user
    ├── calc.ui
    ├── main.cpp
    └── shareObject
        ├── demo.c
        ├── demo.h
        ├── demo.o
        ├── libdynamic.so
        └── Makefile

二、编译动态库.so

1、创建三个文件demo.h、demo.c和Makefile

(1)demo.h代码如下

#ifndef __DEMO_LIB_H
#define __DEMO_LIB_H

#ifdef __cplusplus
extern "C" {
#endif

int  add(int a, int b);

#ifdef __cplusplus
}
#endif

#endif

(2)demo.c代码如下

//返回a+b的和
int  add(int a, int b)
{
	int c = a + b;
	return c;
}

(3)Makefile代码如下:

GCC := gcc
SRCS := $(wildcard *.c)
OBJS := $(patsubst %.c, %.o, $(SRCS))

TARGET = libdynamic.so
all:$(TARGET)
%.o:%.c
	$(GCC) -c -fPIC $< -o $@
libdynamic.so:$(OBJS)
	$(GCC) -shared -o $@ $^

.PHONY:clean
clean:
	rm -fr $(TARGET) $(OBJS)

(4)执行makefile生成需要的动态库libdynamic.so

三、Qt调用动态库.so

(1)在calc.pro中添加头文件路径和动态库路径

 

 (2)calc.cpp中调用函数add(a,b),其代码如下

#include "calc.h"
#include "ui_calc.h"
#include "demo.h"
#include <QDebug>

Calc::Calc(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Calc)
{
    ui->setupUi(this);
    int a =3;
    int b= 4;
    int c = add(a,b);
    qDebug() << "a + b = " << c;
}

Calc::~Calc()
{
    delete ui;
}

四、源码下载

链接:https://pan.baidu.com/s/1Hkl7s5pOiksv7vZD3BKB9Q 
提取码:05ev

Logo

更多推荐