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

如何在CMake项目中以Superbuild方式构建mysql-connector-cpp?

解决Superbuild方式构建mysql-connector-cpp的链接错误

以下是针对你遇到的链接错误的具体修复步骤:


1. 修复mysql-connector-cpp的INTERFACE库配置

当前ThirdParty/CMakeLists.txt仅设置了头文件路径,未关联编译生成的静态库,导致mysql相关函数无法找到。修改该文件如下:

include(ExternalProject)

set(MYSQL_CONNECTOR_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/mysql-connector-cpp_Build)
set(MYSQL_CONNECTOR_INSTALL_DIR ${MYSQL_CONNECTOR_BINARY_DIR}/install)

ExternalProject_Add(mysql-connector-cpp_Proj
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/mysql-connector-cpp
    BINARY_DIR ${MYSQL_CONNECTOR_BINARY_DIR}
    USES_TERMINAL_CONFIGURE TRUE
    USES_TERMINAL_BUILD TRUE
    CMAKE_ARGS
        ${opt_args}
        -DCMAKE_INSTALL_PREFIX=${MYSQL_CONNECTOR_INSTALL_DIR}
        -DWITH_JDBC=ON
        -DBUILD_STATIC=ON
        # 同步主项目的编译配置
        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
        -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
)

add_library(mysql-connector-cpp INTERFACE)
add_dependencies(mysql-connector-cpp mysql-connector-cpp_Proj)

# 指向安装后的头文件目录
target_include_directories(mysql-connector-cpp INTERFACE
    ${MYSQL_CONNECTOR_INSTALL_DIR}/include
)

# 添加静态库搜索路径
target_link_directories(mysql-connector-cpp INTERFACE
    ${MYSQL_CONNECTOR_INSTALL_DIR}/lib
)

# 链接静态库文件
target_link_libraries(mysql-connector-cpp INTERFACE
    mysqlcppconn-static
    mysqlcppconn8-static
)

关键修改点:

  • 修正头文件路径为安装目录下的include(而非编译临时目录)
  • 添加静态库的搜索路径和具体库名
  • 同步主项目的编译类型和C++标准,避免ABI不兼容

2. 修复app库与可执行文件的冗余配置

当前src/app/CMakeLists.txt将main.cpp同时加入了库和可执行文件,导致代码冗余且可能引发链接冲突。修改该文件如下:

set(source
    src/appLib.cpp
)

add_library(app ${source})

target_include_directories(app PUBLIC inc)
target_include_directories(app PRIVATE inc/app)

target_link_libraries(app PUBLIC
    common
    core
    mysql-connector-cpp
)

add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} app core)

关键修改点:

  • 从app库的源文件列表中移除main.cpp,仅保留业务逻辑代码
  • 移除不必要的add_dependencies声明(CMake会自动处理链接依赖的构建顺序)

3. 额外检查项

  • 确认check函数的声明与实现完全匹配(包括参数类型、const修饰符等),且声明的头文件已被main.cpp正确包含
  • 若check函数属于core或common库,确认这些库已正确编译并包含对应函数的实现

内容的提问来源于stack exchange,提问作者cinargursoy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:44:50