MacBookM1平台使⽤C++连接MySQL
环境
软硬件参数
操作系统MacOs Monterey(version 12.0.1)
芯⽚Apple M1
g++ / gcc  4.2.1
clang13.0.0
CMake17
Clion2021.2.3
其实这⾥并没有涉及到编译,所以 g++,GCC 和 Clang 并需要跟我统⼀,CMake 版本主要是代码编译链接的时候⽤的,也没必要跟我⼀样。
第⼀步先安装 MySQL
MacOs 虽然是类 Linux 系统,但还是有本质上的区别的,⽹上很多在 linux 上进⾏的操作我亲⾃操作后不可以使⽤,⽐如安装 libmysqld-dev 或者 mysql-devel,因为没有 MacOs 的特供搬,也可能是我没到,所以直接就选择安装整个 MySQL 了。
官⽹下载 MySQL 安装包
这⾥⼀定要下载对应的平台,⽐如我的是 M1 的,下载的就是(ARM,64-bit)版本的。下载下来后⼀路默认安装就⾏。然后你就可以在以下路径看到⼀个 MySQL 的⽬录了。
/usr/local/mysql
记住这个路径,待会⼉会⽤到。
第⼆步在代码中添加头⽂件
<
cmake_minimum_required(VERSION 3.20)
project(cty)
set(CMAKE_CXX_STANDARD 17)
# 设置别名
set(MYSQL_HEADER /usr/local/mysql/include)
set(MYSQL_LIB /usr/local/mysql/lib)
# 添加 MySQL 连接头⽂件
include_directories(${MYSQL_HEADER})
# 添加 MySQL 外部库
link_libraries(${MYSQL_LIB})
# 添加执⾏程序
add_executable(cty main.cpp)
# 添加链接库
target_link_libraries(cty ${MYSQL_LIB}/libmysqlclient.a)
target_link_libraries(cty ${MYSQL_LIB}/libmysqlservices.a)
target_link_libraries(cty ${MYSQL_LIB}/libssl.1.1.dylib)
target_link_libraries(cty ${MYSQL_LIB}/libcrypto.1.1.dylib)
解释⼀下,target_link_libraries 必须要在 add_executable 之后,因为要先编译再链接,顺序不能错。其次,⼀定要引⼊ libmysqlclient.a 和libmysqlservices.a 这两个库,这两个库中有 MySQL 的各种函数实现,libssl.1.1.dylib 和 libcrypto.1.1.dylib 是动态链接库,不仅这⾥要写上,在运⾏代码之前,需要将这两个动态库拷贝到 /usr/local/lib 下:
sudo cp /usr/local/mysql/lib/libssl.1.1.dylib /usr/local/lib
sudo cp /usr/local/mysql/lib/libcrypto.1.1.dylib /usr/local/lib
在代码执⾏的时候会去调⽤这两个库,如果没有就会报错:
dyld[72956]: Library not loaded: libssl.1.1.dylib
Referenced from: /Users/chentianyi/Program/Clion-workplace/test/cmake-build-debug/cty
Reason: tried: 'libssl.1.1.dylib'(no such file), '/usr/local/lib/libssl.1.1.dylib'(no such file), '/usr/lib/libssl.1.1.dylib'(no such file), '/Users/chentianyi/Program/Cl ion-workplace/test/cmake-build-debug/libssl.1.1.dylib'(no such file), '/usr/local/lib/libssl.1.1.dylib'(no such file), '/usr/lib/libssl.1.1.dylib'(no such file)
zsh: abort      ./cty
代码测试
#include<iostream>
#include<mysql.h>
using namespace std;
const char host[]="IP 地址";
const char user[]="user";
const char pwd[]="password";
const char database[]="database";
unsigned int port =3306;
int main(){
MYSQL myCont;
mysql_init(&myCont);
if(mysql_real_connect(&myCont, host, user, pwd, database, port,nullptr,0)){
cout <<"Hello MySQL"<< endl;
}else{
cout <<"connect failed!"<< endl;
}
mysql下载选x86还是arm
mysql_close(&myCont);
return0;
}
如果没有什么问题,输出结果就是 “Hello MySQL”。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。