使用CMake构建MariaDB Connector/C++项目时遇链接错误
解决MinGW下链接MariaDB Connector/C++ 1.1.4的未定义引用问题
问题根源
官方下载的MariaDB Connector/C++ 1.1.4是基于MSVC工具链编译的,而你使用的MinGW属于GCC工具链,两者的二进制库ABI不兼容,导致链接器无法识别MSVC编译的mariadbcpp.lib中的函数符号,从而出现sql::mariadb::get_driver_instance()未定义的错误。
解决方案
1. 编译MinGW版本的MariaDB Connector/C++
自行从源码编译适配MinGW的连接器版本:
- 克隆指定版本的源码:
git clone --branch 1.1.4 https://github.com/mariadb-corporation/mariadb-connector-cpp.git - 创建编译目录并进入:
mkdir build && cd build - 用CMake配置MinGW编译环境(替换
你的安装路径为实际路径):cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="你的安装路径" -DCMAKE_BUILD_TYPE=Release .. - 编译并安装:
mingw32-make && mingw32-make install
2. 修正CMakeLists.txt配置
编译完成后,修改项目的CMake配置,链接MinGW生成的库文件:
cmake_minimum_required(VERSION 3.28) project(MariaDB_Connector_Sample) set(CMAKE_CXX_STANDARD 20) add_executable(MariaDB_Connector_Sample main.cpp) # 链接MinGW编译的连接器库及依赖的MariaDB C连接器库 target_link_libraries(MariaDB_Connector_Sample PUBLIC "你的安装路径/lib/libmariadbcpp.a" "你的安装路径/lib/libmariadb.a" ) target_include_directories(MariaDB_Connector_Sample PUBLIC "你的安装路径/include" )
3. 备选方案:切换到MSVC工具链
如果不想自行编译,可以直接改用MSVC工具链构建项目:
- 在CMake中选择MSVC生成器(比如
Visual Studio 17 2022),直接使用官方提供的MSVC版本连接器,此时原有的CMakeLists.txt配置即可正常工作。
内容的提问来源于stack exchange,提问作者Nazim Araz
相关产品推荐
相关产品推荐

