Windows下MinGW编译MySQL C++连接器出现未定义引用问题
MySQL C++ Connector编译失败问题解决
我是MySQL C++ Connector的新手,尝试多种方式将C++与MySQL链接,但均未编译成功。
C++代码
#include <iostream> #include <mysql_connection.h> #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> #include <jdbc.h> using namespace std; int main() { cout << "Hello world" << endl; sql::Driver *driver = get_driver_instance(); sql::Connection *con = driver->connect("localhost:3306", "root", "root"); sql::Statement *stmt; sql::ResultSet *res; con->setSchema("company"); }
CMakeLists.txt配置
cmake_minimum_required(VERSION 3.27) project(CQL) set(CMAKE_CXX_STANDARD 20) add_executable(CQL main.cpp) add_compile_options( -lmariadbcpp -lmysqlcppconn) include_directories("C:/Program Files/MySQL/Connector C++ 8.0/include/mysql" "C:/Program Files/MySQL/Connector C++ 8.0/include/mysqlx" "C:/Program Files/MySQL/Connector C++ 8.0/include/jdbc" "C:/Program Files/MySQL/Connector C++ 8.0/include" "C:/Program Files/MySQL/Connector C++ 8.0" "C:/Program Files/MySQL/Connector C++ 8.0/bin" ) target_link_directories(CQL PUBLIC "C:/Program Files/MySQL/Connector C++ 8.0") target_link_directories(CQL PUBLIC "C:/Program Files/MySQL/Connector C++ 8.0/lib64") target_link_directories(CQL PUBLIC "C:/Program Files/MySQL/Connector C++ 8.0/lib64/plugin") target_link_directories(CQL PUBLIC "C:/Program Files/MySQL/Connector C++ 8.0/lib64/vs14") target_link_directories(CQL PUBLIC "C:/Program Files/MySQL/Connector C++ 8.0/lib64/bin") link_directories("C:/Program Files/MySQL/Connector C++ 8.0") link_directories("C:/Program Files/MySQL/Connector C++ 8.0/lib64") link_directories("C:/Program Files/MySQL/Connector C++ 8.0/lib64/plugin") link_directories("C:/Program Files/MySQL/Connector C++ 8.0/lib64/vs14") link_directories("C:/Program Files/MySQL/Connector C++ 8.0/bin")
编译错误信息
[2/2] Linking CXX executable CQL.exe FAILED: CQL.exe cmd.exe /C "cd . && C:\msys64\mingw64\bin\c++.exe -g CMakeFiles/CQL.dir/main.cpp.obj -o CQL.exe -Wl,--out-implib,libCQL.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -LC:/PROGRA~1/MySQL/CONNEC~2.0 -LC:/PROGRA~1/MySQL/CONNEC~2.0/lib64 -LC:/PROGRA~1/MySQL/CONNEC~2.0/lib64/plugin -LC:/PROGRA~1/MySQL/CONNEC~2.0/lib64/vs14 -L"C:/Program Files/MySQL/Connector C++ 8.0/lib64/bin" -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ." C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/CQL.dir/main.cpp.obj: in function `check_lib': C:/Program Files/MySQL/Connector C++ 8.0/include/jdbc/cppconn/driver.h:82:(.text+0x1f): undefined reference to `check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/CQL.dir/main.cpp.obj: in function `get_driver_instance_by_name': C:/Program Files/MySQL/Connector C++ 8.0/include/jdbc/cppconn/driver.h:95:(.text+0xba): undefined reference to `_get_driver_instance_by_name' collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed.
相关说明
- 我认为
add_compile_options配置无效,因为编译命令中未出现相关参数; - 使用Windows 11系统;
- 当前使用的是Windows 64位x86版本的MySQL Connector,而我的系统是Windows 64位x64,不确定是否因此导致问题,下载时无x64版本可选;
- 发现该问题的解决方案大多针对Linux环境。
解决方案
目前无法使用MinGW编译器解决该问题,切换至Linux系统或MSVC编译器即可解决。
内容的提问来源于stack exchange,提问作者Khang Truong
相关产品推荐
相关产品推荐

