当前位置:   article > 正文

MacOS下 Qt6编译及链接MySQL_qt6 macos mysql

qt6 macos mysql


一、 本文使用系统环境

系统架构:arm64架构 + intel 架构
Qt版本:6.2.2 (安装时务必勾选源码)
MySQL版本: 8.0.29

二、下载MySQL

可选方式 :

  1. 官网下载对应dmg,根据不同架构选择不同的版本
    在这里插入图片描述
    安装pkg即可,在最后需设置环境变量
export PATH=${PATH}:/usr/local/mysql/bin
  • 1
  1. homebrew 安装 ,homebrew配置教程见该文章
    终端执行如下代码
brew install mysql
  • 1

等待安装完成后验证mysql版本

mysql --version
  • 1

在这里插入图片描述
使用where命令查询mysql的位置

where mysql
  • 1

使用which命令查询当前使用的mysql可执行程序位置

which mysql
  • 1

homebrew需使用的库的位置如下
/opt/homebrew/Cellar/mysql/8.0.29/lib/libmysqlclient.dylib

三、安装cmake

通过homebrew安装
使用如下命令

homebrew install cmake
  • 1

四、编译mysql

  1. 开启新的终端以始上述环境变量生效

  2. 终端创建编译目录

mkdir build-sqldrivers
cd build-sqldrivers
mkdir build
cd build
  • 1
  • 2
  • 3
  • 4
  1. 继续执行cmake识别命令 注意,请根据以下指令填入你的qt源码路径、qt识别路径、mysql include 目录 mysql lib目录,
 cmake -G "Unix Makefiles" \
 /Users/xxx/Qt6.2.2/6.2.2/Src/qtbase/src/plugins/sqldrivers \
 -DCMAKE_PREFIX_PATH=/Users/xxx/Qt/Qt6.2.2/6.2.2/macos \
 -DCMAKE_INSTALL_PREFIX=../ \
 -DMySQL_INCLUDE_DIR="/usr/local/mysql/include" \
 -DMySQL_LIBRARY="/usr/local/mysql/lib/libmysqlclient.dylib"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

正常识别成功如图所示
在这里插入图片描述
3. 执行如下命令以进行编译

若为m1 还需修改编译的架构,此问题的产生原因是是qt源码错误导致
/xxxxx/build-sqldrivers/build/mysql/CMakeFiles/QMYSQLDriverPlugin.dir/link.txt
将x86_64改为 arm64 后重新编译
在这里插入图片描述

cmake --build .
  • 1

此时两个架构均能编译成功
在这里插入图片描述

  1. 执行安装命令
 cmake --install .
  • 1

此时目录结构如图所示
在这里插入图片描述
5. 拷贝lib/cmake/Qt6Sql中的关于MySQL的cmkae识别文件至/Users/xxxx/Qt6.2.2/6.2.2/macos/lib/cmake/Qt6Sql
在这里插入图片描述
6.拷贝plugins/sqldrivers/libqsqlmysql.dylib动态库文件至/Users/xxxx/Qt6.2.2/6.2.2/macos/plugins/sqldrivers
在这里插入图片描述

五、测试mysql

新建一个cmake工程
cmkaelist如下代码所示
注意加入Sql在如下代码中

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Sql REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Sql 
target_link_libraries(untitled PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)
  • 1
  • 2
  • 3

完整cmakelist.txt

cmake_minimum_required(VERSION 3.5)

project(untitled VERSION 0.1 LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Sql REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Sql REQUIRED)

set(PROJECT_SOURCES
        main.cpp
        widget.cpp
        widget.h
        widget.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(untitled
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET untitled APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(untitled SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(untitled
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(untitled PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)

set_target_properties(untitled PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(untitled)
endif()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

在main函数替换如下代码进行测试

#include <QApplication>
#include <QSqlDatabase>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qDebug()<<"available drivers:";
        QStringList drivers = QSqlDatabase::drivers();
        foreach(QString driver, drivers)
            qDebug()<<driver;

    return a.exec();
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运行结果如图所示,已支持QMYSQL
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/292004
推荐阅读
相关标签
  

闽ICP备14008679号