You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行C++可执行文件时出现(No such file)错误——MySQL Connector/C++库链接问题

运行C可执行文件时出现(No such file)错误——MySQL Connector/C库链接问题

嘿,我完全懂你这种在Mac上折腾CMake、MySQL Connector/C++时处处碰壁的感觉!尤其是运行时弹出**「No such file」**的错误,大概率是动态库链接或者路径配置出了问题,我来给你一步步捋清楚解决办法:

第一步:确保CMake配置文件正确

首先在你的项目根目录(/Users/{user}/Documents/Projects/SQL/)创建一个CMakeLists.txt,内容如下:

cmake_minimum_required(VERSION 3.20)
project(SQLProject)

# 指定C++标准,Connector/C++ 9.3建议用C++17及以上
set(CMAKE_CXX_STANDARD 17)

# 查找MySQL Connector/C++库
find_package(MySQLConnectorCPP REQUIRED)

# 查找OpenSSL依赖(Connector/C++ 9.3依赖OpenSSL)
find_package(OpenSSL REQUIRED)

# 指定可执行文件名称和源文件路径
add_executable(sql_app src/main.cpp)

# 链接所需的库文件
target_link_libraries(sql_app PRIVATE MySQLConnectorCPP::mysqlcppconn8 OpenSSL::SSL OpenSSL::Crypto)

如果是手动下载的Connector/C++,编译时需要告诉CMake库的路径,在终端执行以下命令:

cd /Users/{user}/Documents/Projects/SQL
mkdir build && cd build
# 替换成你实际的Connector/C++解压路径
cmake .. -DCMAKE_PREFIX_PATH=/path/to/mysql-connector-c++-9.3.0-macos14-x86_64
make

要是你用Homebrew安装的Connector/C++,直接执行cmake .. && make就行,CMake会自动找到库路径。

第二步:解决运行时动态库找不到的问题

编译成功但运行时提示找不到文件,是Mac的动态库加载路径没配置好,这里有三个实用方法:

  • 临时指定路径运行:在运行可执行文件时手动指定库路径
    # 替换成你的Connector/C++ lib目录路径
    DYLD_LIBRARY_PATH=/path/to/mysql-connector-c++-9.3.0-macos14-x86_64/lib ./sql_app
    
  • 编译时嵌入库路径:修改CMakeLists.txt,添加rpath配置,让可执行文件记住库的位置,这样后续运行就不用手动指定路径了
    在target_link_libraries后面添加:
    set_target_properties(sql_app PROPERTIES
        INSTALL_RPATH "/path/to/mysql-connector-c++-9.3.0-macos14-x86_64/lib"
        BUILD_WITH_INSTALL_RPATH ON
    )
    
    重新编译后直接运行./sql_app即可。
  • 用Homebrew安装库(最省心):如果之前是手动下载的,不妨换成Homebrew安装,它会自动处理库路径:
    brew install mysql-connector-c++
    
    之后重新配置CMake编译,运行时就不会有路径问题了。

额外检查:代码的头文件是否正确

Connector/C++ 9.3默认使用新的X DevAPI,代码里要引入正确的头文件,示例代码如下:

#include <mysqlx/xdevapi.h>
#include <iostream>

using namespace mysqlx;

int main() {
    try {
        // 替换成你的MySQL账号密码,注意端口是33060(X DevAPI端口)
        Session sess("localhost", 33060, "your_username", "your_password");
        std::cout << "连接成功!" << std::endl;
        sess.close();
    } catch (const mysqlx::Error& err) {
        std::cerr << "错误信息:" << err.what() << std::endl;
        return 1;
    }
    return 0;
}

备注:内容来源于stack exchange,提问作者Charles Florestal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:58:17