环境
软硬件 | 参数 |
---|---|
操作系统 | MacOs Monterey(version 12.0.1) |
芯片 | Apple M1 |
g++ / gcc | 4.2.1 |
clang | 13.0.0 |
CMake | 17 |
Clion | 2021.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
记住这个路径,待会儿会用到。
第二步在代码中添加头文件
CMakeList.txt
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/Clion-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_close(&myCont);
return 0;
}
如果没有什么问题,输出结果就是 “Hello MySQL”。