Qt Creator与CMake无法链接外部静态库问题求助
Qt Creator 8.0+CMake 环境下静态库链接问题求助
项目路径结构
build-QMLTest-Desktop_Qt_6_3_1_MinGW_64_bit-Debug // 应用程序编译输出路径 QMLLib build-mylib-Desktop_Qt_6_3_1_MinGW_64_bit-Debug // 静态库编译输出路径 mylib CMakeLists.txt mylib.cpp // 库源码文件 mylib.h QMLTest CMakeLists.txt main.cpp // 应用程序源码文件
尝试的配置与代码
QMLTest/CMakeLists.txt 片段
add_subdirectory(../QMLLib/mylib ../QMLLib/build-mylib-Desktop_Qt_6_3_1_MinGW_64_bit-Debug) target_link_libraries(mylib) set(PROJECT_SOURCES main.cpp qml.qrc )
main.cpp 代码
#include "../QMLLib/mylib/mylib.h" int main(int argc, char *argv[]) { Mylib mylib; }
报错信息
C:/Qt/Tools/mingw1120_64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/QMLTest.dir/main.cpp.obj: in function `qMain(int, char**)': C:/myroot/UITest/QMLTest/main.cpp:13: undefined reference to `Mylib::Mylib()' collect2.exe: error: ld returned 1 exit status
正确配置示例
1. 静态库的CMakeLists.txt(QMLLib/mylib/CMakeLists.txt)
cmake_minimum_required(VERSION 3.16) project(mylib) # 生成静态库 add_library(${PROJECT_NAME} STATIC mylib.cpp mylib.h ) # 暴露头文件路径,让主项目可直接引用 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
2. 主项目的CMakeLists.txt(QMLTest/CMakeLists.txt)
cmake_minimum_required(VERSION 3.16) project(QMLTest) set(CMAKE_CXX_STANDARD 17) # 添加库的源码目录,并指定编译输出路径 add_subdirectory(../QMLLib/mylib ../QMLLib/build-mylib-Desktop_Qt_6_3_1_MinGW_64_bit-Debug) set(PROJECT_SOURCES main.cpp qml.qrc ) # 创建应用程序目标 add_executable(${PROJECT_NAME} ${PROJECT_SOURCES}) # 将静态库链接到应用程序(格式:目标名在前,库名在后) target_link_libraries(${PROJECT_NAME} PRIVATE mylib) # Qt项目需添加对应模块(根据实际需求调整) find_package(Qt6 REQUIRED COMPONENTS Core Quick) target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Quick)
3. 修改main.cpp的头文件引用
#include "mylib.h" int main(int argc, char *argv[]) { Mylib mylib; // 后续Qt初始化代码... }
内容的提问来源于stack exchange,提问作者gmmo
相关产品推荐
相关产品推荐

